symfony 4 多种形式循环树枝提交
symfony 4 multiple forms loop twig submit
我需要一份 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
}
}
}
我认为问题出在上面的代码中:我为每个生成的表单执行 //I do stuff 代码,而不仅仅是一个。每个表单都会被提交,而不仅仅是被点击的表单。
然后,我渲染表格:
foreach ($forms as &$form)
{
$form = $form->createView();
}
然后发送到我从控制器渲染的树枝模板:
// 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 %}
表单包含一个输入框和一个提交按钮。
如何让提交按钮只提交一个表单而不是提交所有表单?
当您提交表单时,所有具有相同 html 名称属性的表单都会被修改。
为了区分您的表单,您必须以不同的方式命名您的表单,以便拥有类似
的内容
form1_[input]
[...]
form1_[submit]
form2_[input]
[...]
form2_[submit]
您可以像这样创建一个任意名称的表单
$forms[$index] = $this->container
->get('form.factory')
->createNamed('form' . $index, MyForm::class, $formData);
除了第一个参数是自定义表单名称外,它与助手 $this->createForm(MyForm::class, $formData);
完全一样
我需要一份 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
}
}
}
我认为问题出在上面的代码中:我为每个生成的表单执行 //I do stuff 代码,而不仅仅是一个。每个表单都会被提交,而不仅仅是被点击的表单。
然后,我渲染表格:
foreach ($forms as &$form)
{
$form = $form->createView();
}
然后发送到我从控制器渲染的树枝模板:
// 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 %}
表单包含一个输入框和一个提交按钮。
如何让提交按钮只提交一个表单而不是提交所有表单?
当您提交表单时,所有具有相同 html 名称属性的表单都会被修改。
为了区分您的表单,您必须以不同的方式命名您的表单,以便拥有类似
的内容form1_[input]
[...]
form1_[submit]
form2_[input]
[...]
form2_[submit]
您可以像这样创建一个任意名称的表单
$forms[$index] = $this->container
->get('form.factory')
->createNamed('form' . $index, MyForm::class, $formData);
除了第一个参数是自定义表单名称外,它与助手 $this->createForm(MyForm::class, $formData);
完全一样