我无法理解symfony2的formbuilder如何处理集合。
我有以下表单构建器
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('datatypes', 'collection', array(
'type' => new DatatypeType(),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false,
'label' => false
));
}
使用默认表单主题(form_div),这将创建以下构造
<div data-prototype="...">
<div>
<label>0</label>
<div>
<label>
<input>
<div>
<label>
<input>
首先,为什么要创建一个标有“0”作为内容的标签?我试过“label”=&gt;是的,但它仍然是生成的。
其次,我希望将集合更改为如下,但原型仍将由form_div主题生成,因此即使我手动创建formpart也无法使用。
<table>
<tr>
<th>Title
<th>Title
<tr>
<td>
<input>
<td>
<input>
<tr>
<td>
<input>
<td>
<input>
我如何实现我想要的结果?
答案 0 :(得分:1)
0表示集合中的子表单的索引。 我实现集合的方式是按字段打印表单。这样,所有那些我不需要的标签都不会被渲染。 这是一个例子:
<form class="form-horizontal" role="form" action="{{ path('path') }}" method="POST">
{{form_row(form.name)}}
<div class="collection-wrapper" data-prototype="{{ _self.datatype_prototype(form.datatypes.vars.prototype)|e }}">
{% for datatype in form.datatypes %}
{{ _self.datatype_prototype(datatype) }}
{% endfor %}
</div>
{{ form_widget(form._token) }}
</form>
在页面中,没有包含在任何块中,我创建了一个宏,用于显示原型:
{% macro datatype_prototype(childForm) %}
{{ form_widget(childForm) }}
{% endmacro %}
不是由您来决定如何显示表单,您可以像对待任何其他表单一样自定义childForm的呈现方式(请参阅http://symfony.com/doc/current/cookbook/form/form_customization.html)。