【问题标题】:symfony 4 multiple forms loop twig submitsymfony 4 多个表单循环树枝提交
【发布时间】:2018-08-16 19:43:56
【问题描述】:

我需要一个 div 表单。我设法做到了,但是当我提交其中一个时,它会全部提交。


我的控制器将一组表单发送到树枝模板。

首先我实例化我的所有表单:

$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                                                                        
));

从树枝模板中,我循环遍历表单:

{% 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 名称是否不同?
  • @goto 否,所有表单都具有相同的名称属性。有没有办法为每个生成一个不同的?

标签: php forms symfony twig symfony4


【解决方案1】:

当您提交表单时,如果所有表单具有相同的 html 名称属性,它们都会被修改。

为了区分你的表单,你必须给你的表单命名不同,以便有类似的东西

form1_[input]
[...]
form1_[submit]


form2_[input]
[...]
form2_[submit]

您可以像这样创建一个比您任意名称的表单

$forms[$index] = $this->container
    ->get('form.factory')
    ->createNamed('form' . $index, MyForm::class, $formData);

它与助手$this-&gt;createForm(MyForm::class, $formData); 完全一样,只是第一个参数是自定义表单名称

【讨论】:

  • 谢谢,但是如何在 getBlockPrefix() 中生成不同的前缀?
  • @NanoPish 忘记 BlockPrefix,我找到了我正在寻找的方法 :] 让我知道它是否有效,我无法测试
  • 它完全有效!它是很好的语法糖。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
相关资源
最近更新 更多