@@ -217,22 +217,35 @@ sent as response::
217
217
that forwards the ``Request `` to a given controller defined by the
218
218
``exception_listener.controller `` parameter.
219
219
220
- .. note ::
220
+ Symfony uses the following logic to determine the HTTP status code of the
221
+ response:
222
+
223
+ * If :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isClientError `,
224
+ :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isServerError ` or
225
+ :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isRedirect ` is true,
226
+ then the status code on your ``Response `` object is used;
227
+
228
+ * If the original exception implements
229
+ :class: `Symfony\\ Component\\ HttpKernel\\ Exception\\ HttpExceptionInterface `,
230
+ then ``getStatusCode() `` is called on the exception and used (the headers
231
+ from ``getHeaders() `` are also added);
221
232
222
- Symfony uses the following logic to determine the HTTP status code of the
223
- response:
233
+ * If both of the above aren't true, then a 500 status code is used.
224
234
225
- * If :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isClientError `,
226
- :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isServerError ` or
227
- :method: `Symfony\\ Component\\ HttpFoundation\\ Response::isRedirect ` is true,
228
- then the status code on your ``Response `` object is used;
235
+ .. note ::
236
+
237
+ If you want to overwrite the status code of the exception response, which
238
+ you should not without a good reason, call
239
+ ``GetResponseForExceptionEvent::allowSuccessfulResponse() `` first and then
240
+ set the status code on the response::
229
241
230
- * If the original exception implements
231
- :class: `Symfony\\ Component\\ HttpKernel\\ Exception\\ HttpExceptionInterface `,
232
- then ``getStatusCode() `` is called on the exception and used (the headers
233
- from ``getHeaders() `` are also added);
242
+ $event->allowSuccessfulResponse();
243
+ $response = new Response('No Content', 204);
244
+ $event->setResponse($response);
234
245
235
- * If both of the above aren't true, then a 500 status code is used.
246
+ The status code sent to the client in the above example will be ``204`. If
247
+ ``$event->allowSuccessfulResponse() `` is omitted, then the kernel will set
248
+ an appropriate status code based on the type of exception thrown.
236
249
237
250
.. seealso ::
238
251
0 commit comments