Twig 无法从宏访问.vars.prototype
我正试图使用Twig 无法从宏访问.vars.prototype,twig,symfony,Twig,Symfony,我正试图使用数据原型attr. 为此,我使用了一些细枝宏: 由控制器调用的视图 {# the principal view .html.twig #} {% from"AppBundle:Macros:tabRangeVal.html.twig" import tableau %} [...] {{ tableau('InstrumentSharedUtils/File',form.documentations) }} {{ tableau('Specification
数据原型
attr.为此,我使用了一些细枝
宏
:
由控制器调用的视图
{# 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 %}
问题是我得到了错误
Method "name" for object "Symfony\Component\Form\FormView" does not exist in AppBundle:Form:InstrumentSharedUtils/File.html.twig at line 2
真正困扰我的是,如果我不使用宏,我可以访问这个名称(甚至其他的prototype.vars.children
)
例如,以下代码可以工作:
{# principal view .html.twig #}
{% for i in form.documentations.vars.prototype %}
{{ form_widget(i) }}
{% endfor %}
我觉得这和上面的完全一样,
form.documentations
=>arrayVar
,
arrayVar.vars.prototype
=>值
,以及
{% for i in value %}
{{ form_widget(i.name) }}
{{ form_widget(i.path) }}
{{ form_widget(i.isExtra) }}
{% endfor %}
输出应该是相同的
你能帮我找出哪里出了问题吗?好吧,我可能会责怪自己太愚蠢了,但写下来后,我意识到(在最后一段代码中)我犯了一个错误:
末尾的i值
已经是name或path或isExtra…
所以当我试图访问form.documentations.vars.prototype.name.name
它的逻辑时,我得到了一个异常
因此,解决方案是修改dataproto宏
{% macro proDataType(classe, value) %}
<tr class='block-to-remove'>
<td><button class='btn btn-default btn-delete-row'><span class='glyphicon glyphicon-minus'></span></button></td>
{% for truc in value %}
<td>{{ form_widget(truc, { 'attr': { 'class':'form-control' } }) }}</td>
{% endfor %}
</tr>
{% endmacro %}
{%macro-proDataType(classe,value)%}
{值为%的truc的百分比}
{{form_小部件(trc,{'attr':{'class':'form-control'}}}}
{%endfor%}
{%endmacro%}
并且发送一个arrayVar.vars.prototype
给它好吧,我可能会鞭笞自己太愚蠢了,但是通过写下它,我意识到(在最后的代码部分)我犯了一个错误:
末尾的i值
已经是name或path或isExtra…
所以当我试图访问form.documentations.vars.prototype.name.name
它的逻辑时,我得到了一个异常
因此,解决方案是修改dataproto宏
{% macro proDataType(classe, value) %}
<tr class='block-to-remove'>
<td><button class='btn btn-default btn-delete-row'><span class='glyphicon glyphicon-minus'></span></button></td>
{% for truc in value %}
<td>{{ form_widget(truc, { 'attr': { 'class':'form-control' } }) }}</td>
{% endfor %}
</tr>
{% endmacro %}
{%macro-proDataType(classe,value)%}
{值为%的truc的百分比}
{{form_小部件(trc,{'attr':{'class':'form-control'}}}}
{%endfor%}
{%endmacro%}
并向其发送arrayVar.vars.prototype
{% macro proDataType(classe, value) %}
<tr class='block-to-remove'>
<td><button class='btn btn-default btn-delete-row'><span class='glyphicon glyphicon-minus'></span></button></td>
{% for truc in value %}
<td>{{ form_widget(truc, { 'attr': { 'class':'form-control' } }) }}</td>
{% endfor %}
</tr>
{% endmacro %}