【发布时间】:2019-06-21 12:13:59
【问题描述】:
我想知道如何在一个控制器中放置多个表单? 我这样做了,请参见下面的代码,在我的控制器中包含 2 个表单; 1加一匹马,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 个表单来完成什么?
-
我想让用户可以在一个页面(他们的帐户页面)中同时进行(添加一匹马和一组马)这避免了他们必须转到另一个页面专门为每种形式制作。我很好地回答了你的问题 Lunin Roman 吗?
-
@Marilou 只保留一个组马表单处理程序不是更好吗,以便用户可以通过它提交一匹或多匹马?
-
我认为@BenjaminKozlowski 已经回答了我的问题,我今晚必须更深入地尝试,但它似乎有效!非常感谢本杰明!
标签: forms symfony controller symfony-forms