如何在Symfony2中抛出403异常?

Got*_*bel 22 php error-handling http-status-code-403 symfony

我正在检查我的请求URI中是否有特定的令牌,Symfony\Component\Security\Core\Exception\AccessDeniedException如果没有令牌或令牌错误则抛出一个令牌.

if(!isset($token) && $token != 'whatever') {
  throw new AccessDeniedException('No token given or token is wrong.');
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时AccessDeniedException,Symfony2只是重定向到登录页面.相反,我想有一个专用的403错误页面(我已经创建了app/Resources/TwigBundle/views/Exceptions/error403.html.twig文件).

为了达到这个目的,我还需要改变什么?我是否必须使用PHP本机异常?但是如何判断传递403错误代码?

Symfony2是否有一个特定的403-Exception,它不会简单地重定向到登录?

Cer*_*rad 42

Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException.

这将绕过安全系统,并给你403响应,反过来将由twig异常监听器拾取.

  • 在Symfony 2.5中,您还可以使用throw $ this-> createAccessDeniedException('您无法访问此页面!'); (参见http://symfony.com/blog/new-in-symfony-2-5-create-the-correct-denied-http-exception) (8认同)