Symfony2 : 同一页面中的两种形式

2022-08-30 19:39:22

我在同一页面中有两个表单。

我的问题是,当我尝试提交表单时,就像它尝试在页面下方提交第二个表单一样。

如下,您可以找到我的2表格:

public function createSuiviForm() {

    return $form = $this->createFormBuilder(null)
            ->add('numero', 'text', array('label' => 'N° : ',
                'constraints' => array(
                    new Assert\NotBlank(array('message' => 'XXXX')),
                    new Assert\Length(array('min' => 19, 'max' => 19, 'exactMessage' => 'XXX {{ limit }} XXX')))))
            ->add('xxxx', 'submit')
            ->getForm();
}

public function createModificationForm() {

    return $form = $this->createFormBuilder(null)
            ->add('modification', 'submit', array('label' => 'XXXXXXXXXXXXXXXXXXXX'))
            ->getForm();
}

我的第二个表单只是一个提交按钮。

我将它们传递到我的渲染中,并使用以下命令显示它们:

<div class="well">
    <form method="post" action='' {{form_enctype(form)}} >
        {{ form_widget(form) }}
        <input type="submit" class="btn btn-primary"/>
    </form>
    <div class='errors'>
        {{ form_errors(form) }}
     </div>
</div>

“form”是我的第一个窗体的变量的名称,而我的第二个窗体的“更新”是我的变量的名称。

当我尝试提交第二个表单时,我需要点击两次,最后我得到:

"This form should not contain extra fields."
And all non valid input for the remainding form.

我试图将validation_group添加到假中,但无济于事。

我不明白为什么我得到这个错误,因为我的表单根本没有嵌入

我希望你能理解...


答案 1

您必须分别处理表单:

if('POST' === $request->getMethod()) {
 
    if ($request->request->has('form1name')) {
        // handle the first form  
    }

    if ($request->request->has('form2name')) {
        // handle the second form  
    }
}

这在Symfony2 Multi Forms: Different from Embedded Forms中得到了完美的解释(暂时不可用 - 见下文)

更新

由于上面提供的链接暂时不可用,因此您可以在此处查看该资源的存档。


答案 2

这在Symfony 3中为我做了伎俩(也应该适用于Symfony 2):

$form1 = $this->createForm(
    MyFirstFormType::class
);

$form2 = $this->createForm(
    MySecondFormType::class
);

if ($request->isMethod('POST')) {

    $form1->handleRequest($request);
    $form2->handleRequest($request);

    if ($form1->isSubmitted()) {
        // Handle $form1
    } else if ($form2->isSubmitted()) {
        // Handle $form2
    }

}

推荐