Symfony2 异常响应。用 200 替换 404 状态码

标签 symfony exception-handling response

我在 symfony2 中有一个 404 处理程序,它是一个 EventListener。

对于某些 404,我进行了重定向,效果很好。对于浏览器,不会抛出 404。

new RedirectResponse( $newURL );

该行基本上用 200 替换了 404 状态代码。

但在其他情况下,我想返回一些内容,而不是 404 消息,而是一些替换数据。像这样的东西:
$response = new Response( $returnJSONMessage );
$response->headers->set( 'Content-Type', 'application/json' );
$response->setStatusCode(200);

代码明智,这很好,但它不会阻止返回 404。我猜是因为它位于:
$event->setResponse( $theResponse );

属于 GetResponseForExceptionEvent 类型。

我需要调用什么才能让它以 200 而不是 404 的形式返回我的数据。与 RedirectResponse 似乎相同。
我试过:
$event->stopPropagation();

但事与愿违。在这种情况下,似乎 $event->setResponse 中任何不是 RedirectResponse 的内容都被标记为 404。

有任何想法吗?

最佳答案

终于通过 Symfony GitHub pull 找到了我想要的东西;

$response->headers->set( 'X-Status-Code', 200 );

允许您覆盖异常状态代码。
$response->setStatusCode(200);

不管用。

在这里请求:
https://github.com/symfony/symfony/pull/5043

拉到这里:
https://github.com/symfony/symfony/commit/118a5d2274dc7d6701c3e2a758b820cd49ebaf3b

关于Symfony2 异常响应。用 200 替换 404 状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387354/

相关文章:

php - Symfony 访问 web 目录之外的 mp3 文件以在浏览器中播放

php - 将 FOSRestBundle 与表单一起使用

php - 带有 FFMPEG 的 Laravel Process() 对任何甚至很大的视频都会超时

c++ - C++ 异常会安全地通过 C 代码传播吗?

javascript - 使用 Chrome 扩展中的 onClick 将按钮添加到页面的正确方法

node.js - nodejs设置数据响应超时

symfony - 覆盖 bundle 中的图像

python - 处理多个异常时共享 Python 代码

powershell - 如何在PowerShell中捕获异常并将其发送给处理属性的方法?

php - Symfony2:间歇性高响应时间/慢 SessionHandlerProxy::read() 完成