我的表格中有一些隐藏字段。
<ul id="user_roles">
<li><hidden field value="role1"></li>
<li><hidden field value="role2"></li>
(...)
</ul>
我使用jQuery(和数据原型)来添加新角色。
问题是我想渲染这样的东西:
<ul id="user_roles">
<li>role1 <hidden field value="role1"></li>
<li>role2 <hidden field value="role2"></li>
(...)
</ul>
初始渲染没问题:我只是把:
{% for role in roles %}
<li> {{ role }} {{ form_row(role) }} </li>
{% endfor %}
但默认数据原型只会呈现{{form_row(role)}}(隐藏字段)。
我应该在哪里更改默认数据原型?
form_div_layout.html中没有{%block prototype%}我可以自定义....
答案 0 :(得分:8)
集合小部件定义如下:
{% block collection_widget %}
{% spaceless %}
{% if prototype is defined %}
{% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
{% endif %}
{{ block('form_widget') }}
{% endspaceless %}
{% endblock collection_widget %}
因此,你可以覆盖它以控制你想要如何渲染原型。
答案 1 :(得分:1)
您还可以通过调用roles.vars.prototype从内部模板访问原型,并在以后的JS中使用它。如果你想把它放到div的data-prototype属性中(因为它通常被渲染)你必须记住逃避它:
<div data-prototype="{{ form_row(roles.vars.prototype) | escape }}">
{% for role in roles %}
<li> {{ role }} {{ form_row(role) }} </li>
{% endfor %}
</div>
答案 2 :(得分:0)
docs中建议的方法允许您在应用内独立自定义每个集合,所有这些都在同一个文件中。
创建文件prototype_layout.html.twig
:
{% block _myform_mycollection_entry_row %}
<div class="row">
<div class="col-sm-6">{{ form_row(form.title) }}</div>
<div class="col-sm-6">{{ form_row(form.author) }}</div>
</div>
{% endblock %}
块的名称很重要。如果您的父表单被称为_myform
,则第一部分将是MyformType
;如果您拥有该集合的表单字段被调用,则第一部分将是_mycollection
。第三部分必须始终为_entry_row
才能实现此目的。
例如,如果您的UserType
表单的集合为'books'
,则块名称可能为_user_books_entry_row
要确保您的名称正确,请添加子表单(通过单击添加按钮以使用javascript添加子表单)并使用浏览器的检查器工具检查相应的select html元素的ID。
如果它看起来像user_books_0_title
,则块名称将为_user_books_entry_row
在config.yml
的树枝部分中将此文件声明为全局表单主题:
twig:
form_themes:
- 'AppBundle:Form:prototype_layout.html.twig' #adapt this path if you saved your file elsewhere
您也可以直接在表单视图中使用该文件:
{% use "AppBundle:Form:prototype_layout.html.twig" %}