2012-01-08 93 views
5

是否可以为集合表单字段中的项目添加自定义全局模板?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处理。理想情况下,这应该也适用于添加新项目的行原型。

回答

12

最后我找到了一个很好的解决方案。 首先,我不得不创建一个collection_widget自定义模板(从通用form_widget复制而来),而不是调用form_rows块,我调用了collection_rows块,这是一个form_rows块的自定义。 在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 %}