2012-01-08 120 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 %}