1

我正在创建一个自定义表单主题来为自定义字段类型生成正确的 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 并出现此错误:函数“sortableCollection_row”在第 39 行的 DTAMetadataBundle: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 %}

一个想法,有人吗?谢谢!

4

1 回答 1

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,因为您不再将子变量传递给块。

于 2012-12-12T12:59:37.403 回答