我正在检查我的请求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而不是简单地重定向到登录?
答案 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.');