0

symfony 1.4.8 を使用していますが、非表示の csrf フォーム フィールドをレンダリングしようとすると、レンダリングされたフィールドに値が追加されません。私はこれを以前に問題なく実行しました。コードとレンダリングされた出力を確認するには、以下の例を参照してください。

コード:

<?php echo $form['_csrf_token']->render(); ?>

生成:

<input type="hidden" name="contact[_csrf_token]" id="contact__csrf_token" />

コード:

<?php echo $form['_csrf_token']->renderRow(); ?>

生成:

<tr>
  <th><label for="contact__csrf_token"> csrf token</label></th>
  <td><input type="hidden" name="contact[_csrf_token]" value="3cf960d4553e2649f86d0ccd12a26efe" id="contact__csrf_token" /></td>
</tr>

ご覧のとおり、2 番目のメソッドは csrf_token の値を生成しますが、他のすべての行情報も生成します。このrender()メソッドは、値を使用して「ウィジェット」(この場合は非表示の入力フィールド) を生成するだけであると想定されています。何らかの理由で値が追加されません。

4

4 に答える 4

1

なぜ明示的にレンダリングする必要があるのですか? なぜあなたは使用していないの$form->renderHiddenFields()ですか?

于 2010-11-10T19:01:23.160 に答える
0

symfony でのこの動作にはさまざまな理由がありますが:

  • フォームの検証を処理する前にbindを使用しないでください。
  • セッション時間が終了し、セッション ID がありません。
  • CSRF 検証が無効になっているか、 settings.ymlファイルでcsrf_secret値が設定されていません

CSRF トークンの値を直接出力するための簡単な解決策を提示します。

<input type="hidden" name="signin[_csrf_token]" id="signin__csrf_token" value="<?php echo $form->getCSRFToken(); ?>" />

使用:

$form->getCSRFToken();

新しく生成された CSRF トークンをレンダリングします。

于 2014-09-19T21:35:48.043 に答える
0

$form->renderHiddenFields()代わりに使用してください。

于 2010-11-10T19:02:22.597 に答える
0

ハードリフレッシュを行う必要があります。セッションで何かが詰まっています。

ハードリフレッシュは Shift+F5

それが失敗した場合は、ドメインのすべてのドメイン Cookie を削除して、もう一度やり直してください。

他の場所で csrf をいじっていない限り、これは単なるセッションの問題です。

于 2010-11-10T19:08:36.750 に答える