根据表单选择添加表单域

时间:2015-10-12 15:27:08

标签: javascript php forms symfony

我需要根据用户输入动态地向表单添加字段。假设我有一个带有子实体B和C的实体A.最初,表单有一个选择字段,用户可以在其中选择类型B或C.如果用户选择B,则应将字段Bx和By添加到表单中,如果用户选择C,则应添加字段Cx,Cy和Cz。

我可以使用PHP / Symfony执行此操作,还是需要使用JavaScript来显示/隐藏字段?我正在阅读关于Symfony的Dynamic Form Modification教程,但我仍然无法弄清楚如何做到这一点。

1 个答案:

答案 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]);
}