我知道我不是第一个提出这个问题的人。但我尝试了一切以使其发挥作用。
首先,我有一个名为Assignment
的实体和另一个实体unit
。 Assignment
与名为Unit
的{{1}}有很多关系。
这会创建表单:
units
这是public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pickupTime', DateTimeType::class, [
'required' => true,
'label' => 'Zeitpunkt Abholung',
'date_widget' => 'single_text',
'time_widget' => 'single_text',
])
->add('deliverTime', DateTimeType::class, [
'required' => true,
'label' => 'Zeitpunkt Lieferung (geplant)',
'date_widget' => 'single_text',
'time_widget' => 'single_text',
])
->add('customer', EntityType::class, [
'required' => true,
'label' => 'Kunde',
'class' => Customer::class,
'query_builder' => function (EntityRepository $er) use ($options) {
return $er->createQueryBuilder('cu')
->leftJoin('cu.client', 'c')
->where('c.id = :cid')
->setParameter('cid', $options['client_id'])
->orderBy('cu.companyName', 'DESC');
},
])
->add('pickupAddress', AddressType::class, [])
->add('deliverAddress', AddressType::class, [])
->add('units', CollectionType::class, [
'entry_type' => UnitType::class,
'allow_add' => true,
'prototype' => true,
'attr' => array(
'class' => 'assignment-units',
),
]);
}
的表单部分的模板:
units
但它不起作用 - 它是symfony docs(http://symfony.com/doc/master/form/form_customization.html#how-to-customize-a-collection-prototype)的通讯员 - 但我收到错误消息 <div class="row">
<div class="col">
{{ form_label(form.units) }}
<table class="table table-bordered table-light collection-form-wrapper">
<thead>
<tr>
<th>Bez.</th>
<th>Stück</th>
<th>Gewicht</th>
<th>Breite</th>
<th>Höhe</th>
<th>Tiefe</th>
<th></th>
</tr>
</thead>
<tbody>
{% for unit in form.units %}
<tr>
<td>{{ form_row(unit.name) }}</td>
<td>{{ form_row(unit.pieces) }}</td>
<td>{{ form_row(unit.weight) }}</td>
<td>{{ form_row(unit.width) }}</td>
<td>{{ form_row(unit.height) }}</td>
<td>{{ form_row(unit.depth) }}</td>
<td>
<a href="#" class="btn btn-danger btn-sm btn-delete" data-id="{{ loop.index }}"><i
class="fa fa-trash"></i></a>
</td>
</tr>
{% else %}
<tr>
<td colspan="7" class="text-center">
<div class="p2">
<i>
<small>Noch keine Einträge vorhanden</small>
</i>
</div>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<td colspan="7">
<a href="#" class="btn btn-primary btn-sm" id="add-item"><i class="fa fa-plus"></i>
Hinzufügen</a>
<a href="#" class="btn btn-danger btn-sm" id="delete-all"><i class="fa fa-trash"></i> Tabelle leeren</a>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
{% form_theme form _self %}
{% block _units_entry_widget %}
<tr>
<td>{{ form_row(form.name) }}</td>
<td>{{ form_row(form.pieces) }}</td>
<td>{{ form_row(form.weight) }}</td>
<td>{{ form_row(form.width) }}</td>
<td>{{ form_row(form.height) }}</td>
<td>{{ form_row(form.depth) }}</td>
<td>
<a href="#" class="btn btn-danger btn-sm btn-delete"><i
class="fa fa-trash"></i></a>
</td>
</tr>
{% endblock %}
。
我怎么了?我不明白问题出在哪里。当我尝试使用form_theme覆盖Neither the property "name" nor one of the methods "name()", "getname()"/"isname()"/"hasname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
的窗口小部件时,调试器不会显示集合units
的字段。当我使用form_theme删除部件时,会显示字段。
编辑: UnitType代码:
units
答案 0 :(得分:0)
我认为问题来自用于自定义集合项目视图的块的名称。
第一部分必须是父表单名称。
第二部分是集合字段名称。
第三部分必须始终为 _entry_row 。
所以(取决于表单的名称)你应该写一些类似的东西:
{% block _assignment_units_entry_row %}
代替{%block _units_entry_widget%}