【问题标题】:Variable "csrf_token" does not exist in ::base.html.twig::base.html.twig 中不存在变量“csrf_token”
【发布时间】:2012-06-28 20:19:15
【问题描述】:

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 模板粘贴到我的脑海中?

【问题讨论】:

    标签: php symfony fosuserbundle


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      要从您的控制器中生成一个正常工作的 csrf 控制器,请see a previous post

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 2018-02-16
        相关资源
        最近更新 更多