Как объединить несколько форм в одном контроллере -> ошибка при отправке - Symfony 4. * - PullRequest
0 голосов
/ 28 января 2019

Я хотел бы знать, как я могу поместить более одной формы в один контроллер?Я сделал это, см. Код ниже, в моем контроллере, который содержит 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 голосов
/ 28 января 2019

Вы ищете вариант 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
        )
    );
}

Этот параметр позволяет отправлять некоторые дополнительные данные, не указанные в конструкторе форм.Как говорится в официальной документации

Обычно, если вы отправляете дополнительные поля, которые не были настроены в вашей форме, вы получите «Эта форма не должна содержать дополнительные поля».ошибка проверки.

Эту ошибку проверки можно отключить, включив в форме параметр allow_extra_fields.

0 голосов
/ 28 января 2019

У меня был такой случай, вот что я сделал:

$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...
    }
}

Это работает для меня, но кажется, что вы сделали, на первый взгляд, хотя.

Может быть, это то, как вы справляетесь с этим в своем шаблоне?

...