我们已经成功配置了 FOSUserBundle;登录、注册、重置密码等,一切正常。
现在我们要将登录表单合并到我们的一般站点布局中,特别是将表单放置在布局标题的右上部分。如果我们只处理用户名和密码字段,这样做就很容易了。但是我们似乎无法弄清楚如何获取由 FOSUserBundle 服务生成的 CSRF token :
$this->container->get('form.csrf_provider')->generateCsrfToken('authenticate');
我尝试在 Twig 扩展中调用上面的方法,否则工作正常,但显然扩展无法正确引用容器。
肯定有一些简单的方法可以在全局范围内获取 FOSUserBundle CSRF token 吗?
谢谢! 杰森
最佳答案
Symfony 2.3:
一种可能的解决方案是将 csrf 提供程序定义为 Twig 全局变量,如下所示:
twig:
globals:
fos_csrf_provider: "@form.csrf_provider"
然后在你的布局中这样调用它:
<input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.generateCsrfToken('authenticate') }}" />
所以你不需要调用任何 Controller 。
Symfony 2.4 及更高版本:
twig:
globals:
fos_csrf_provider: "@security.csrf.token_manager"
和:
<input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.refreshToken('authenticate') }}" />
关于php - Symfony FOSUserBundle - 在布局模板中包含登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903114/