如何自定义Symfony 3.4集合原型

时间:2018-05-10 13:50:11

标签: php forms symfony twig symfony-3.4

我知道我不是第一个提出这个问题的人。但我尝试了一切以使其发挥作用。

首先,我有一个名为Assignment的实体和另一个实体unitAssignment与名为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

1 个答案:

答案 0 :(得分:0)

我认为问题来自用于自定义集合项目视图的的名称。

第一部分必须是父表单名称

第二部分是集合字段名称

第三部分必须始终为 _entry_row

所以(取决于表单的名称)你应该写一些类似的东西:

{% block _assignment_units_entry_row %}代替{%block _units_entry_widget%}