【问题标题】:How to override layout.html.twig from FOSUserBundle如何从 FOSUserBundle 覆盖 layout.html.twig
【发布时间】:2012-08-03 14:15:24
【问题描述】:

我知道 FOSUserBundle 文档中完美回答了这个问题,但我无法解决我的问题。

我正在尝试使用 FOSUserBundle 创建一个自己的登录页面。

我有一个 main.html.twig,它与 FOSUserBundle 源中包含的 login.html.twig 完全相同。

唯一的区别是 main.html.twig 在我自己的 bundle 结构中,而 login.html.twig 在 FOSUserBundle 文件夹结构中。

我同时联系了/login/main。我解决了它们并开始渲染。

但是在访问/main时,出现如下错误:

Twig_Error_Runtime:第 5 行的“AcmeStoreBundle:Main:main.html.twig”中不存在变量“csrf_token”

FOSUserBundle 用户知道该代码,但无论如何我将其粘贴在这里:

<form action="{{ path("fos_user_security_check") }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />

<label for="username">{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}</label>
<input type="text" id="username" name="_username" value="" />

<label for="password">{{ 'security.login.password'|trans({}, 'FOSUserBundle') }}</label>
<input type="password" id="password" name="_password" />

<input type="checkbox" id="remember_me" name="_remember_me" value="on" />
<label for="remember_me">{{ 'security.login.remember_me'|trans({}, 'FOSUserBundle') }}</label>

<input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans({}, 'FOSUserBundle') }}" />

从 FOSUserBundle 外部无法识别变量“csrf_token”。或者其他我没有得到的东西。

那边有什么线索吗?

【问题讨论】:

    标签: php symfony fosuserbundle


    【解决方案1】:

    由于您没有使用FormBuilder,因此在您负责呈现main.html.twig 的操作中,您应该生成此令牌并将其传递给视图。

    $csrf = $this->get('form.csrf_provider'); //Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider by default
    $token = $csrf->generateCsrfToken($intention); //Intention should be empty string, if you did not define it in parameters
    

    您应该将$token 作为csrf_token 变量传递给您的视图

    也检查my answer 到类似的问题

    【讨论】:

    • 是的,就是这样!顺便说一句,我太傻了:)非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2013-05-19
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多