CSRFトークンの非表示入力をform_rest
でレンダリングする通常の方法があることは知っていますが、just CSRF入力自体をレンダリングする方法はありますか?テーマで{% block field_widget %}
をオーバーライドして、追加のテキストをレンダリングしました。しかし、CSRFトークンは入力フィールドでもレンダリングされ、非表示フィールドの横に必要のないテキストを取得しました。したがって、このテキストをレンダリングしないように指示する引数を使用して、個別にレンダリングしたいと思います。
あなたは{{ form_widget(formView._token) }}
でそれを行うことができます
formView
オブジェクトがある場合、Twig関数を使用してレンダリングできます:
{{ form_widget(formView._token) }}
まだ持っていない場合は、フォームオブジェクトを直接使用せずにトークンをレンダリングできます。
<input type="hidden" name="token" value="{{ csrf_token('some-name') }}">
Symfony 2.xおよび3.xで動作します
トークンを検証するには、コントローラー(Symfony 3.x)で次のコードを使用できます。
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
// ... do something,
}
または、単にこれを使用することができます:
{{ form_row(form._token) }}
これにより、使用しているフォームのタイプに応じて、適切な非表示のHTML要素、つまり適切なHTML構造とフィールド名が自動的に生成されます。
Delete操作に使用できるように、csrf入力を内部でTwig= 。@YuryPliashkouの答えに従って{{ csrf_token('authenticate') }}
を使用すると、間違ったトークン(ログインにのみ有効なトークン)が返されます。
私のために働いたのは、この{{ csrf_token('form') }}
でした。これは、正しいcsrfトークンを提供し、ajax経由でコントローラーに渡します。
<span id="csrf_token" data-token="{{ csrf_token('form') }}"></span>
// my ajax call
$.ajax({
url: localhost/admin/product/4545, // 4545->id of the item to be deleted
type: 'POST',
data: {
"_method": "DELETE",
"form[_token]": $("#csrf_token").data("token") // passed csrf token here
},
success: function(result) {
// Do something
}
});
Symfony 3.x.での動作を確認しました
私の解決策がうまくいかなかった、例でSimfony3 value = "{{_token}}"を見つけてテストし、働いた
<form name="form" method="post" action="{{ path('blog_show', { 'id': blog.id }) }}">
<input name="_method" value="DELETE" type="hidden">
<input class="btn btn-danger" value="Delete" type="submit">
<input id="form__token" name="form[_token]" value="{{ _token }}" type="hidden">
</form>
scrfの詳細については、こちらをご覧ください。 Symfony2でフォームを手動で作成しますが、CSRFとisValid()を機能的に使用します