如何在Symfony2中抛出403异常?

时间:2014-02-21 10:46:15

标签: php symfony error-handling http-status-code-403

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

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

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

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

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

2 个答案:

答案 0 :(得分:40)

抛出Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException

这会绕过安全系统并给你403响应,而这反过来又会被twig异常监听器接收。

答案 1 :(得分:3)

从Symfony 2.6开始,你可以使用以下控制器快捷方式来触发你的好例外:

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