1

この質問はFOSUserBundleのドキュメントで完全に回答されていることは知っていますが、それでも問題を解決することはできません。

FOSUserBundleを使用して独自のログインページを作成しようとしています。

FOSUserBundleソースに含まれているmain.html.twigものとまったく同じものがあります。login.html.twig

唯一の違いは、main.html.twigが私自身のバンドル構造にあり、login.html.twigがFOSUserBundleフォルダー構造にあることです。

との両方に到達/login/mainます。それらを解決すると、レンダリングが開始されます。

しかし、にアクセスする/mainと、次のエラーが発生します。

Twig_Error_Runtime:変数「csrf_token」が5行目の「AcmeStoreBundle:Main:main.html.twig」に存在しません

コードは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') }}" />

変数「csrf_token」は、FOSUserBundleの外部からはどういうわけか認識されません。または私が得ていない何か他のもの。

あそこに何か手がかりはありますか?

4

1 に答える 1

4

を使用していない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

同様の質問に対する私の答えも確認してください

于 2012-08-06T15:25:53.877 に答える