如何在一个控制器中集成多个表格->提交时出错-Symfony 4. *

时间:2019-01-28 13:18:48

标签: forms symfony controller symfony-forms

我想知道如何在一个控制器中放置多个表格? 我这样做了,请参见下面的代码,该代码在我的控制器中包含2种形式。 1添加一匹马,一个添加一组马:

  /*Add a horse*/
  $cheval = new Chevaux();
    $cheval->setParticulier($user->getParticulier());

    $formAddHorse = $this->createFormBuilder($cheval)
         ->add('nom_cheval', TextType::class)
        ->add('save', SubmitType::class, array('label' => 'Ajouter'))
        ->getForm();
        $formAddHorse->handleRequest($request);

    if ($formAddHorse->isSubmitted() && $formAddHorse->isValid()) {
        $cheval = $formAddHorse->getData();
        $em = $this->getDoctrine()->getManager();
        $em->persist($cheval);
        $em->flush();

        return $this->redirectToRoute('app_acc');
    }


    /*add a group of horses*/
    $team=new Team();
    $team->setUser($user->getParticulier());

    $formAddTeam = $this->createFormBuilder($team)
      ->add('profession', EntityType::class, array(
        'class' => Profession::class,
        'choice_label' => 'nom_prof',
        'expanded' => true))
        ->add('save', SubmitType::class, array('label' => 'Nouvelle Team'))
        ->getForm();

    $formAddTeam->handleRequest($request);


    if ($formAddTeam->isSubmitted() && $formAddTeam->isValid()) {
        $team = $formAddTeam->getData();
        $em = $this->getDoctrine()->getManager();
        /*
        * Traitement des données
        */
        return $this->redirectToRoute('app_acc');
    }

并在模板中:

<h2> -------Add a horse------ </h2>
{{ form_start(formHorse) }}
{{ form_widget(formHorse) }}
{{ form_end(formHorse) }}
<h2> ------------------------------ </h2>

<h2> -------Add team------ </h2>
{{ form_start(formTeam) }}
{{ form_widget(formTeam) }}
{{ form_end(formTeam) }}
<h2> ------------------------------ </h2>

但是,当我提交其中一种表格时,似乎两者都已发送。因此会引发错误:

  

此表单不应包含其他字段

我没有提交的表格。 数据已正确发送到数据库中,但是错误在这里,并告诉我我做错了什么。我该怎么做才能正确地做到这一点?

2 个答案:

答案 0 :(得分:0)

我曾经有过这样的情况,这就是我所做的:

$form = $this->createForm(ProfileForm::class, $user);
$formPassword = $this->createForm(ChangePasswordForm::class, $user);
$form->handleRequest($request);
$formPassword->handleRequest($request);

if ($form->isSubmitted()) {
    if ($form->isValid()) {
        // My code to save some things...
    }
}

if ($formPassword->isSubmitted()) {
    if ($formPassword->isValid()) {
        // My code to save some things...
    }
}

它对我有用,但是乍一看好像你做了什么。

也许这就是您在模板中处理它的方式?

答案 1 :(得分:0)

您正在寻找可以像这样使用的allow_extra_fields选项。

$formBuilder = $this->createFormBuilder($team, array('allow_extra_fields' =>true))...

对于FormType类,则是这样

public function setDefaultOptions(OptionsResolver $resolver)
{
        $resolver->setDefaults(
        array(
            'allow_extra_fields' => true
        )
    );
}

option允许您提交表单构建器中未指定的一些额外数据。如官方文件所述

  

通常,如果您提交的其他字段未在您的   表单,您将看到“此表单不应包含其他字段”。   验证错误。

     

您可以通过启用   表单上的allow_extra_fields选项。

相关问题