【发布时间】:2014-03-22 20:06:16
【问题描述】:
我正在检查我的请求 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,它不会简单地重定向到登录?
【问题讨论】:
-
你能不能
catch异常并在header()中捕获一个 HTTP 403 错误? -
Symfony2 通常会捕获和处理所有异常。所以我并不是真的在寻找解决方法......
-
使用 onKernelResponse() 捕捉您的响应。没有?
-
我不是 Symfony 方面的专家,所以我会把它留给更有资格回答的人;我不确定这些是否符合要求,但我想我会提到它们以防你错过它们:HttpException 和 AccessDeniedHttpException:api.symfony.com/2.4/Symfony/Component/HttpKernel/Exception.html
-
抛出 Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException。这将绕过安全系统并给你一个 403 响应。
标签: php symfony error-handling http-status-code-403