如何在 Symfony2 的部分登录表单中捕获身份验证错误

How to catch authentication error in a login form partial in Symfony2

亲爱的 Whosebug 社区,

目前我正在 Symfony2 中实现一个身份验证系统,同时为我的用户实体使用 FOSUserBundle。

我创建了一个包含登录表单的 Twig 部分,我想重复该表单。全局捕获身份验证错误的最佳方法是什么,最好不要在控制器中捕获错误,因为我希望表单在应用程序的每个页面上都能工作。

我发现当身份验证失败时设置了一个会话变量_security.last_error。我可以使用框架中的钩子吗?

为了和controller分离捕获认证失败的错误信息,我写了一个service

使用以下行捕获异常:

$authenticationUtils = $this->getContainer()->get('security.authentication_utils');
$error = $authenticationUtils->getLastAuthenticationError();

我已将该服务注册为全局 twig 变量,现在我可以重用部分登录表单,而无需编辑负责包含该部分的布局的控制器。