如何自定义CollectionType()项?

时间:2011-11-17 09:32:57

标签: symfony twig

这个§ of the Symfony2 documentation显示了一种用于自定义单个字段的强大技术。我正在使用它很多,但有一个特殊的Type,我很难进行自定义:CollectionType()自定义集合本身非常简单,你可以做这样的事情:

{% block _mynamespace_mybundle_mytype_mycollectionfield_row %}
{% if prototype is defined %}
    {% set attr = attr|merge({'data-prototype': form_widget(prototype) }) %}
{% endif %}
{% spaceless %}
    <ul {{ block('widget_container_attributes') }}>
        {% spaceless %}
            {{ form_errors(form) }}
            {% for child in form %}
            <li>
              {{form_widget(child)}}
            </li>
            {% endfor %}
        {% endspaceless %}
        {{ form_rest(form) }}
    </ul>
{% endspaceless %}
{% endblock %}

但是如何自定义集合的每个元素?如何使用Twig自定义data-prototypedata-prototype是一个用js添加新项目的特殊属性)?

我尝试过这样的事情(对于data-prototype):

{% block _mynamespace_mybundle_mytype_mycollectionfield_$$name$$_row %}
customization ok!
{% endblock %}

但我收到错误,因为我不知道如何逃避$

关于这些项目,我尝试了很多东西:

{% block _mynamespace_mybundle_mytype_mycollectionfield_item_subfield_row %}
customization ok!
{% endblock %}

{% block _mynamespace_mybundle_mytype_mycollectionfield_element_subfield_row %}
customization ok!
{% endblock %}

他们都没有工作。

1 个答案:

答案 0 :(得分:0)

我在symfony的bug跟踪器中问了这个问题,似乎没有解决方案,但是一个好的解决方法是为你想要自定义的每个子字段创建一个自定义类型。见this issue