我需要将每个div转化为一个表单。我已经完成了这个任务,但是当我提交其中一个表单时,所有表单都被提交了。
我的控制器向twig模板发送了一组表单数组。
首先,我实例化了所有的表单:
$forms = [];
foreach ($data as $index => $something)
{
// create form
$formData = new FormData($data);
$forms[$index] = $this->createForm(MyForm::class, $formData);
}
完成后,我遍历表单以处理提交:
foreach ($forms as $form)
{
$form->handleRequest($request);
if ($form->isSubmitted())
{
if ($form->isValid())
{
// I do stuff
}
}
}
我认为问题出在上面的代码:我执行了“//我做一些事情”的代码,而不是只针对一个生成的表单。每个表单都被提交了,而不仅仅是点击的那一个。
然后,我渲染这些表单:
foreach ($forms as &$form)
{
$form = $form->createView();
}
并将它们发送到我从控制器呈现的twig模板中:
// render template
return $this->render('prestations.html.twig', array(
'forms' => $forms,
'error' => $error
));
在twig模板中,我循环遍历表单:
{% for stuff in stuffs %}
<div>
<p>{{ loop.index0 }}</p>
{{ form_start(forms[loop.index0]) }}
{{ form_widget(forms[loop.index0]) }}
{{ form_end(forms[loop.index0]) }}
</div>
{% endfor %}
这个表单包含一个输入框和一个提交按钮。
如何让提交按钮只提交一个表单而不是所有表单?