1 つのアクションで 2 つのフォームを作成していますが、これらのフォームは jquery ajax によって他の 2 つのアクションに送信されます。さて、問題は - 最初のフォームのみが機能することです。編集フォームは、csrf トークンが無効であることをスローします。なぜそれが起こっているのですか?私のコード:
フォームの作成:
$project = new Project();
$addProjectForm = $this->createForm(new AddProjectType(), $project, [
'action' => $this->generateUrl('tfpt_portfolio_versionhistory_addproject'),
'method' => 'POST',
'attr' => ['id' => 'newProjectForm']
]);
$editProjectForm = $this->createForm(new EditProjectType(), $project, [
'action' => $this->generateUrl('tfpt_portfolio_versionhistory_editproject'),
'method' => 'POST',
'attr' => ['id' => 'editProjectForm']
]);
送信編集フォームの処理 (ただし、追加フォームはほとんど同じです):
$project = new Project();
$form = $this->createForm(new EditProjectType(), $project);
$form->handleRequest($request);
if($form->isValid()){
//handle form
}
}
これら 2 つのフォームの唯一の違いは、編集フォームにはもう 1 つのフィールド (非表示の ID) があることです。どちらも次のように jquery によって送信されます。
var form = $("#editProjectForm")
if(form.valid()){
$("#loader").show();
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data){
//result
}
});
そして、私はそのようなフォームを表示します:
{{ form_start(editProjectForm) }}
{{ form_errors(editProjectForm) }}
{{ form_widget(editProjectForm.name) }}
{{ form_widget(editProjectForm.id) }}
{{ form_rest(editProjectForm) }}
{{ form_end(editProjectForm) }}
誰かが私の間違いを指摘できますか?1回のアクションで3つのフォームを埋め込むことはできませんか? または、別の方法で CSRF を生成する必要がありますか?
@Edit: symfony を最新のリリースに更新したところ、完全に動作するようになりました。このバージョンにはバグがあったか、ベンダーのコードが不足しているようです。とにかく、問題は解決しました。