我找到了一种解决方法,因为不使用 JavaScript 似乎无法自动呈现表单。
我没有使用{{ form_widget(form) }} 一次呈现整个表单,而是逐个字段呈现并使用{{ form_widget(form.categoy.vars.prototype) }} 呈现Category 集合。模板代码如下所示:
<div id="form">
{{ form_start(form) }}
{{ form_errors(form) }}
...
{{ form_row(form.name) }}
{{ form_row(form.price) }}
...
<h2>Categories</h2>
{{ form_row(form.idCategory) }}
{{ form_widget(form.idCategoryNew.vars.prototype) }}
...
<button type="submit">Create</button>
{{ form_end(form) }}
</div>
产品类型:
$builder
->add('name'))
->add('price'))
...
->add('idCategory', 'entity', array('class' => 'MyBundle\Entity\Category'))
->add('idCateogryNew', 'collection', array('type' => new CategoryType(), 'allow_add' => true))
...
编辑:
我找到了一个更好的解决方法,它包括将集合表单传递给 twig 模板。这种方式很容易处理表单提交后的post请求。如果有人想要代码,请询问:)
编辑 2:
根据@agapitocandemor 请求:
在您的 MainEntityController(在我的例子中为 ProductController)中,搜索呈现表单的方法(在我的例子中为 newAction)并创建您要呈现的实体表单:
public function newAction()
{
$entity = new Product();
$entityform = $this->createForm(new ProductType(), $entity);
$subentityform = $this->createForm(new CategoryType(), new Category);
return $this->render('MyBundle:Product:new.html.twig', array(
'entity' => $entity,
'entityform' => $entityform->createView(),
'subentityform' => $subentityform->createView()
));
}
最后,为了渲染subentityform,您只需从主实体的new 模板调用{{ form_widget(subentityform) }}。