我有两个实体:产品和类别。 每个实体使用Symfony Form Builder呈现自定义表单。
我正在尝试使用collection field type在“商品”表单中包含“类别”表单。包含行如下所示:
$builder->add('idCategory', 'collection', array('type' => new CategoryType());
工作正常(根据Symfony documentation)。但我不想用JavaScript创建表单,我希望在不更改twig模板的情况下使用表单的其余部分进行呈现:
<form action="{{ path('product_create') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<button type="submit">Create</button>
</form>
甚至可能吗?有什么想法吗?
答案 0 :(得分:1)
您知道要包含在产品中的类别数量吗?
答案 1 :(得分:0)
我发现了一种解决方法,因为似乎无法在不使用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模板。这种方式在表单提交后很容易处理发布请求。如果有人想要代码,请询问:)
编辑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
,您只需要从主要实体的{{ form_widget(subentityform) }}
模板中调用new
。