web-dev-qa-db-ja.com

Symfony2で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 native Exception?を使用する必要がありますか?403エラーコードを渡すようにするにはどうすればよいですか

Symfony2には、単にログインにリダイレクトしない特定の403-Exceptionがありますか?

22

スローSymfony\Component\HttpKernel\Exception\AccessDeniedHttpException

これにより、セキュリティシステムがバイパスされ、403応答が返されます。この応答は、twig例外リスナーによって取得されます。

42
Cerad

Symfony 2.6では、次のコントローラーショートカットを使用して、適切な例外をトリガーできます。

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