symfony2中的自定义集合模板


Custom collection templates in symfony2

是否可以为集合表单字段中的项添加自定义全局模板?

我不想自定义集合模板本身,而是自定义集合中每个对象的呈现,例如,为集合中包含的每个对象添加特定的类或标记。

我有一个添加了收款字段的表单,如下所示:

$builder
    ->add('items', 'collection', array(
        'type' => new ItemType(),
        'allow_add' => true,
        'allow_delete' => true,
        'prototype' => true
    ));

我想定义一个小树枝模板,为集合中的每个项目添加一个"删除"按钮(等等)。

我发现有一个"collection_widget"模板可以自定义收藏,购买它只是为了收藏本身,而不是单个物品。

注1:我需要使用一个全局模板来为所有表单中的所有集合执行此操作,我知道我可以为每个表单模板解决此问题,但这不是重点。

注2:到目前为止,我用jquery解决了这个问题,向collection_widget添加了一个类,并用jquery为它的所有子级添加了按钮。这目前工作得很好,但我正在寻找一个100%的模板解决方案,而不必进行所有的jquery处理。理想情况下,这也应该与行原型一起工作,以添加新项目。

最后我找到了一个很好的解决方案。首先,我必须创建一个collection_widget自定义模板(从通用的form_widget复制而来),在内部,我不调用form_rows块,而是调用collection_rows区块,这是form_row区块的自定义。在collection_rows块中,您可以自定义任何您想要的内容,我只是为每个孩子添加了一个自定义类。

这是两个模板:

{% block collection_widget %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
        {{ block('collection_rows') }}
        {{ form_rest(form) }}
    </div>
{% endspaceless %}
{% endblock collection_widget %}
{% block collection_rows %}
{% spaceless %}
    {{ form_errors(form) }}
    {% for child in form %}
        {{ form_row(child, {'attr':{'class':'collection-item'}}) }}
    {% endfor %}
{% endspaceless %}
{% endblock collection_rows %}