Я пытаюсь настроить функцию добавления/удаления коллекции с помощью атрибута data-prototype
.
Для этого я использую некоторые прут macro
: представления с именем контроллеромНевозможно получить доступ к .vars.prototype из макросов
{# the principal view .html.twig #}
{% from"AppBundle:Macros:tabRangeVal.html.twig" import tableau %}
[...]
{{ tableau('InstrumentSharedUtils/File',form.documentations) }}
{{ tableau('SpecificationsSheet/SpecificationSheet',form.list) }}
[...]
макрос для tableau
{# /src/AppBundle/Resources/views/Macros/tabRangeVal.html.twig #}
{% macro tableau(classe, arrayVar) %}
{% from "AppBundle:Form:"~ classe ~ ".html.twig" import val %}
{% from "AppBundle:Form:"~ classe ~ ".html.twig" import label %}
{% from "AppBundle:Macros:dataProto.html.twig" import proDataType %}
<div class="well well-sm">
<h5> {{ form_label(arrayVar) }}</h5>
<table class="table">
<thead>
<tr>
<th><button class="btn btn-default btn-add-row" type="button" id="{{ "add_#{arrayVar.vars.id}" }}"><span class="glyphicon glyphicon-plus"></span></button></th>
{{ label() }}
</tr>
</thead>
<tbody id="{{ "container_#{arrayVar.vars.id}" }}" data-prototype="{{ proDataType(classe, arrayVar.vars.prototype)|e }}">
{% for i in arrayVar %}
<tr >
<td><button class="btn btn-default btn-delete-row"><span class="glyphicon glyphicon-minus"></span></button></td>
{{ val(i) }}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endmacro %}
макроса для поля данных прототипа
{# /src/AppBundle/Resources/views/Macros/dataProto.html.twig #}
{% macro proDataType(classe, value) %}
{% from "AppBundle:Form:"~ classe ~ ".html.twig" import val %}
<tr>
{% for v in value %}
<td><button class="btn btn-default btn-delete-row"><span class="glyphicon glyphicon-minus"></span></button></td>
{{ val(v) }}
{% endfor %}
</tr>
{% endmacro %}
в пример AppBundle:Form:"~ classe ~ ".html.twig
{# /src/AppBundle/Resources/views/Form/InstrumentSharedUtils/File.html.twig #}
{% macro val(var) %}
<td>{{ form_widget(var.name, { 'attr': { 'class':'form-control' } }) }}</td>
<td>{{ form_widget(var.path, { 'attr': { 'class':'form-control' } }) }}</td>
<td>{{ form_widget(var.isExtra) }}</td>
{% endmacro %}
{% macro label() %}
<th>Name</th>
<th>Path</th>
<th>Is Extra</th>
{% endmacro %}
Проблема заключается в том, что я получаю ошибку
Method "name" for object "Symfony\Component\Form\FormView" does not exist in AppBundle:Form:InstrumentSharedUtils/File.html.twig at line 2
Дело в том, что действительно беспокоит меня то, что я могу получить доступ к имени (и даже другие prototype.vars.children
), если я не использую макрос
по Exemple, следующий код работает:
{# principal view .html.twig #}
{% for i in form.documentations.vars.prototype %}
{{ form_widget(i) }}
{% endfor %}
и я чувствую, как его точно так же, как и выше, с form.documentations
=>arrayVar
,
arrayVar.vars.prototype
=>value
и
{% for i in value %}
{{ form_widget(i.name) }}
{{ form_widget(i.path) }}
{{ form_widget(i.isExtra) }}
{% endfor %}
выход должен быть таким же ...
вы могли бы помочь мне найти то, что случилось там?