是否可以为集合表单字段中的项添加自定义全局模板?
我不想自定义集合模板本身,而是自定义集合中每个对象的呈现,例如,为集合中包含的每个对象添加特定的类或标记.
我有一个带有收集字段的表单,如下所示:
$builder
->add('items', 'collection', array(
'type' => new ItemType(),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true
));
Run Code Online (Sandbox Code Playgroud)
我想定义一个树枝模板,为集合中的每个项目添加"删除"按钮(以及其他内容).
我发现有一个'collection_widget'模板来定制集合,买这个只是为了集合本身,而不是单个项目.
注1:我需要使用全局模板才能为所有形式的所有集合执行此操作,我知道我可以为每个表单模板解决此问题,但这不是重点.
注2:到目前为止,我用jquery解决了这个问题,在collection_widget中添加了一个类,并为jquery的所有孩子添加了按钮.这个现在工作正常,但我正在寻找一个100%的模板解决方案,而不必进行所有的jquery处理.理想情况下,这也适用于添加新项目的行原型.
Jen*_*ens 13
最后我找到了一个很好的解决方案.首先,我不得不创建一个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 %}
Run Code Online (Sandbox Code Playgroud)