我需要根据用户输入动态地向表单添加字段。假设我有一个带有子实体B和C的实体A.最初,表单有一个选择字段,用户可以在其中选择类型B或C.如果用户选择B,则应将字段Bx和By添加到表单中,如果用户选择C,则应添加字段Cx,Cy和Cz。
我可以使用PHP / Symfony执行此操作,还是需要使用JavaScript来显示/隐藏字段?我正在阅读关于Symfony的Dynamic Form Modification教程,但我仍然无法弄清楚如何做到这一点。
答案 0 :(得分:1)
最简单的解决方案是将表单拆分为两页。第一页仅显示不依赖于任何用户选择的表单部分。用户提交表单,然后显示第二个表单,其中包含基于第一个表单输入的表单字段。
您只需为第一页定义表单类型,然后为第二页的所有可能结果定义。如果这比创建完全不同的表单更有意义,您还可以使用已经阅读过的动态表单修改。 然后,在控制器中,添加逻辑以决定要呈现的表单。
也许它看起来像这样:
$entity = new Entity();
$form1 = $this->createForm(new EntityPageOneType(), $entity);
$form1->handleRequest($request);
if($form1->isSubmitted() && $form1->isValid()){
if($entity->foo = 'bar'){
$form2 = $this->createForm(new EntityPageTwoBarType(), $entity);
}
else{
$form2 = $this->createForm(new EntityPageTwoOtherType(), $entity);
}
if($form2->isSubmitted() && $form2->isValid()){
// persist data & redirect
}
return $this->render('template.twig', ['form' => $form2]);
}
else{
return $this->render('template.twig', ['form' => $form1]);
}