我认为你这样做很困难。
对于这个问题,我将创建 2 个表单(FormChildA,FormChildB),并相应地关联字段。
因为无论如何您都在使用 javascript,所以只需使用选项呈现页面并使用 ajax 获取表单:
<div id="select-type">
<button value="child_a" type="button">Select ChildA</button>
<button value="child_b" type="button">Select ChildB</button>
</div>
<div id="form-container"></div>
<script>
$('#select-type button').on('click', function(event) {
event.preventDefault();
$.get('path/to/get_ajax_form', {type: $(this).val()}, function(data) {
$('#form-container').html(data);
});
});
</script>
创建一个 Controller 方法来检索表单:
public function getAjaxFormAction()
{
$type = $this->get('request')->query->get('type');
switch( $type ) {
case 'child_a':
$form = $this->createForm(new FormChildA, new ChildA);
break;
case 'child_b':
$form = $this->createForm(new FormChildB, new ChildB);
break;
}
return $this->render('AcmeBundle:Forms:_type_form.html.twig', array(
'form' => $form->createView(),
'type' => $type,
));
}
为每个表单添加一个带有表单类型值的隐藏字段,
这样您就可以用一种方法验证这些表单(与检索它们的方式相同)。
这使得单独修改和验证每个表单变得更加容易!