Я знаю, что я не первый, кто задает этот вопрос.Но я попробовал все, чтобы заставить его работать.
Сначала у меня есть сущность с именем Assignment
и другая сущность unit
.Assignment
имеет отношение manyToMany к Unit
, называемое 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
:
<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 %}
Но это не работает - это соответствует документации Symfony (http://symfony.com/doc/master/form/form_customization.html#how-to-customize-a-collection-prototype) - но я получаю сообщение об ошибке 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, отладчик не отображает поля коллекции units
. Когда я удаляю деталь с помощью form_theme, отображаются поля.
РЕДАКТИРОВАТЬ: Код UnitType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('quantity')
->add('weight')
->add('width')
->add('height')
->add('depth');
}