:: base.html.twig中不存在变量“csrf_token”

时间:2012-06-28 20:19:15

标签: php symfony fosuserbundle

Symfony2和FOS用户捆绑包问题......

我已经在页面的头部实现了我自己的登录表单(根据http://forum.symfony-project.org/viewtopic.php?f=31&t=37767中的说明使用FOS用户包。)

现在,我收到了错误消息

Variable "csrf_token" does not exist in ::base.html.twig

该论坛上的其他人(上面的网址)有完全相同的问题,并通过放入隐藏的csrf字段来解决它

<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />

我的问题是:在/登录路径上工作正常,但我的全部观点是不需要单独的登录页面,我希望我的表单始终集成在页面头中,似乎{{csrf_token} }仅在登录控制器呈现页面时可用...

另外,我如何在那里得到错误消息(闪烁),我假设我必须以某种方式在我的defaultController中包含登录控制器,每次都用它来获取所有这些变量,或者......?或者我应该在标题的那一部分中呈现userBundle控制器,而不是将一些userBundle模板粘贴到我的头脑中?

2 个答案:

答案 0 :(得分:6)

如果使用Form组件创建自己的登录表单,则应该已将csrf标记作为隐藏字段。 csrf_token变量仅在/ login上可用的原因是因为默认的FOSUserBundle登录控制器不使用表单,而只是手动生成csrf令牌,如here所示,并将其传递给视图。

因此,要么确保使用类似{{ form_rest(form) }}的内容渲染表单上的所有隐藏字段,要么手动生成csrf_token,就像FOSUserBundle here一样,并使用您已有的代码呈现它。

答案 1 :(得分:0)

要从控制器中生成有效的csrf控制器,请see a previous post

这个例子让我解决了你遇到的问题。这是对其他任何扩展FOS用户包表单的人的引用。