1

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 }}" />

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

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

4

2 回答 2

6

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

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

于 2012-06-28T20:48:03.103 回答
0

要从您的控制器中生成一个正常工作的 csrf 控制器,请参阅上一篇文章

此示例使我能够解决您遇到的问题。让这成为扩展 FOS 用户捆绑表单的任何其他人的参考。

于 2012-08-10T23:03:05.863 回答