symfony在响应中覆盖状态代码

symfony在响应中覆盖状态代码,symfony,Symfony,我正在开发一个symfony2.8web应用程序,在这个应用程序中,我需要在ajax请求上返回403json响应,即使用户没有登录,也需要重定向。为了解决这个问题,我使用了一个监听器: class AccessDeniedListener { public function onAccessDeniedException(GetResponseForExceptionEvent $event) { if ($event->getException()->getCode()

我正在开发一个symfony2.8web应用程序,在这个应用程序中,我需要在ajax请求上返回403json响应,即使用户没有登录,也需要重定向。为了解决这个问题,我使用了一个监听器:

class AccessDeniedListener {

public function onAccessDeniedException(GetResponseForExceptionEvent $event) {
    if ($event->getException()->getCode() === 403
            && $event->getRequest()->isXmlHttpRequest()) {
        $event->setResponse(new JsonResponse(['foo' => 'bar']), 403);
        $event->stopPropagation();
    }
  }
}
并将优先级设置为高于默认值的
ExceptionListener
它工作正常,但当我发出AJAX请求时,我得到的是预期的内容,而不是状态码(改为500)


所以我的问题是。。。我做错了什么或者我错过了什么。。。谢谢。

经过长时间的调试,我发现了错误。我觉得自己很傻

我的密码是

$event->setResponse(new JsonResponse(['foo' => 'bar']), 403);
反而

$event->setResponse(new JsonResponse(['foo' => 'bar'], 403));

另外,通过设置对事件的响应,它会停止传播。

检查测试环境的日志。可能发生了一些奇怪的事情。。。
$event->setResponse(new JsonResponse(['foo' => 'bar'], 403));