我在一个动作中创建 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
}
}
这两种形式的唯一区别是编辑形式多了一个字段——隐藏的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) }}
有人可以指出我的错误吗?是不是可以在一个动作中嵌入 3 个表单?或者我必须以其他方式生成 CSRF?
@Edit:我将 symfony 更新到最新版本,现在它可以正常工作了。似乎这个版本有一个错误,或者我缺少一些供应商代码。总之,问题解决了。