Ответ 1
Throw Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
.
Это будет обходить систему безопасности и дать вам ответ 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-исключение, которое не просто перенаправляется на вход в систему?
Throw Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
.
Это будет обходить систему безопасности и дать вам ответ 403, который, в свою очередь, будет подхвачен слушателем прослушивания ветки.
В Symfony 2.6 вы можете использовать следующий ярлык контроллера, который вызовет для вас хорошее исключение:
return $this->denyAccessUnlessGranted('ROLE_EDIT', $item, 'You cannot edit this item.');