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


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

Symfony2 和 FOS User Bundle issue...

我已经在页面头部实现了自己的登录表单(按照 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 }}" />

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

另外,我

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

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

因此,要么确保使用类似 {{ form_rest(form) }} 的内容渲染表单上的所有隐藏字段,要么像 FOSUserBundle 在此处所做的那样手动生成csrf_token并使用您已有的代码进行渲染。

要从控制器中生成有效的 csrf 控制器,请参阅上一篇文章。

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