我想知道如何在一个控制器中放置多个表格? 我这样做了,请参见下面的代码,该代码在我的控制器中包含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>
但是,当我提交其中一种表格时,似乎两者都已发送。因此会引发错误:
此表单不应包含其他字段
我没有提交的表格。 数据已正确发送到数据库中,但是错误在这里,并告诉我我做错了什么。我该怎么做才能正确地做到这一点?
答案 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选项。