如何在 Symfony2 中引发 403 异常?

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

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

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

为了实现这一目标,我必须改变什么?我必须使用 PHP 原生异常吗?但是,我该如何判断是否要传递403错误代码呢?

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


答案 1

扔。Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException

这将绕过安全系统并为您提供403响应,而403响应又会被树枝异常侦听器拾取。


答案 2

从Symfony 2.6开始,您可以使用以下控制器快捷方式,这将触发良好的异常:

return $this->denyAccessUnlessGranted('ROLE_EDIT', $item, 'You cannot edit this item.');

推荐