Contributed by
James Halsall
in #19822.
有时,在Symfony程序中处理异常时,你可能希望改变原始的HTTP响应状态码 (例如要返回一个 404
错误而不是原来的 5xx
码)。
当然,你不能无故这么做,但是Symfony允许你通过设置一个特殊的 X-Status-Code
HTTP头来实现它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
// 500 is the original status code; but the end user will get a 404
// 500 是原来的状态码;但是末级用户会得到一个 404
$response = new Response('...', 500, ['X-Status-Code' => 404]);
// ...
$event->setResponse($response);
} |
X-Status-Code
header并非标准的HTTP功能,因此它总是给我们带来麻烦。在Symfony 3.3中,我们最终决定去掉它,并以标准的方式来处理HTTP响应。
毋须 X-Status-Code
头,现在你可以在响应中,按照常规来设置状态码,调用全新的 allowCustomResponseCode()
方法,以告之Kernel来使用设置在事件中的response对象中的response code:
1 2 3 4 5 6 7 8 9 10 | public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$response = new Response('...', 404);
// ...
$event->allowCustomResponseCode();
$event->setResponse($response);
} |