我正在创建自定义表单主题,以便为自定义字段类型生成正确的HTML。 我注册了我的twigfile,它工作正常,除了找不到奇怪的函数错误。
我复制了创建集合类型的默认主题(form_div_layout)中的部分。 然后我更改了块名称以避免干扰默认样式。 在更改块名称之前,它可以工作甚至使用我的本地定义,但之后twig似乎无法将块用作函数(尽管它在默认主题中有效)。有人能给我一个暗示吗?
这很有效,只是从默认模板中复制而来。
{% block sortableCollection_widget %}
{% spaceless %}
{% if prototype is defined %}
{% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
{% endif %}
<div {{ block('widget_container_attributes') }}>
{% if form.parent is empty %}
{{ form_errors(form) }}
{% endif %}
{{ block('sortableCollection_rows') }}
{{ form_rest(form) }}
</div>
{% endspaceless %}
{% endblock %}
{% block sortableCollection_rows %}
{% spaceless %}
<ol class='.collection-editor .collection-sortable'>
{% for child in form %}
{{ form_row(child) }}
{% endfor %}
</ol>
{% endspaceless %}
{% endblock sortableCollection_rows %}
{% block form_row %}
{% spaceless %}
<li>using my template
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</li>
{% endspaceless %}
{% endblock form_row %}
{% block form_rows %}
{% spaceless %}
{% for child in form %}
{{ form_row(child) }}
{% endfor %}
{% endspaceless %}
{% endblock form_rows %}
现在我将form_row重命名为sortableCollection_row,我收到此错误: DTAMetadataBundle中不存在函数“sortableCollection_row”:第39行的Form:sortableCollection.html.twig
它指向sortableCollection_row(child)被调用的地方。
{% block sortableCollection_widget %}
{% spaceless %}
{% if prototype is defined %}
{% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
{% endif %}
<div {{ block('widget_container_attributes') }}>
{% if form.parent is empty %}
{{ form_errors(form) }}
{% endif %}
{{ block('sortableCollection_rows') }}
{{ form_rest(form) }}
</div>
{% endspaceless %}
{% endblock %}
{% block sortableCollection_rows %}
{% spaceless %}
<ol class='.collection-editor .collection-sortable'>
{% for child in form %}
{{ form_row(child) }}
{% endfor %}
</ol>
{% endspaceless %}
{% endblock sortableCollection_rows %}
{% block sortableCollection_row %}
{% spaceless %}
<li>using my template
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</li>
{% endspaceless %}
{% endblock sortableCollection_row %}
{% block form_rows %}
{% spaceless %}
{% for child in form %}
{{ sortableCollection_row(child) }} // ERROR.
{% endfor %}
{% endspaceless %}
{% endblock form_rows %}
一个想法,某人?谢谢!
答案 0 :(得分:2)
form_row
是一个树枝函数,也是一个树枝块。因此,当您调用form_row(...)
时,您实际上正在调用一个twig函数而不是直接调用该块。该功能将包括块内容,因此我可以看到它是如何混淆。
因此尝试调用sortableCollection_row
无效,因为它实际上不是一个函数,它是一个块。得到它?你可以这样做:
{% block form_rows %}
{% spaceless %}
{% for child in form %}
{{ block('sortableCollection_row') }} // NO ERROR
{% endfor %}
{% endspaceless %}
{% endblock form_rows %}
现在在sortableCollection_row
块内,而不是引用form
,您需要引用child
,因为您不再将子变量传递给块。