我在身份验证侦听器中返回一个带有403状态代码的Response对象。
我所遵循的例子来自the cookbook:
$response = new Response();
$response->setStatusCode(403);
$event->setResponse($response);
创建此响应后,浏览器(Chrome)会显示网络浏览器错误页面:
Access to the web page was denied
You are not authorised to access the web page at http://project/access-denied. You may need to sign in.
我希望它能从app/Resources/TwigBundle/views/Exception/error403.html.twig
显示我自己的错误树枝错误页面(如this cookbook entry中所述)。但是由于已经发送了403响应,所以它没有那么远。
我无法抛出AccessDeniedException,因为这是一个身份验证失败,这意味着不存在导致致命错误的安全令牌。
我可以抛出AuthenticationException,但这只会导致500错误,显示标准的500错误页面。
我能看到这样做的唯一方法是将twig服务传递给侦听器并将其添加到响应中,例如:$response->setContent($twigRenderedError);
但这似乎是一个丑陋的解决方案 - 可能是身份验证中的一个缺陷Symfony2层?