如何在symfony2表单集合中自定义数据原型?
我的表单中有一组隐藏字段。
<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 (角色)}}(隐藏字段)。
我应该在哪里更改默认数据原型?
form_div_layout.html 中没有我可以自定义的 {% block prototype %}...
I've got a collection of hidden fields in my form.
<ul id="user_roles">
<li><hidden field value="role1"></li>
<li><hidden field value="role2"></li>
(...)
</ul>
I use jQuery (and data-prototype) to add new roles.
The problem is that I would like to render something like this:
<ul id="user_roles">
<li>role1 <hidden field value="role1"></li>
<li>role2 <hidden field value="role2"></li>
(...)
</ul>
No problem with the initial rendering: i just put:
{% for role in roles %}
<li> {{ role }} {{ form_row(role) }} </li>
{% endfor %}
But the default data-prototype will render only {{ form_row(role) }} (a hidden field).
Where am I supposed to change the default data-prototype?
There is no {% block prototype %} in form_div_layout.html that i could customize....
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
集合小部件定义如下:
因此您可以覆盖它来控制渲染原型的方式。
The collection widget is defined as follows:
So you can override this to gain control on how you want to rendre the prototype.
您还可以通过调用 Roles.vars.prototype 从模板内部访问原型,并稍后在 JS 中使用它。如果你想将它放入 div 的 data-prototype 属性中(因为它通常呈现),你必须记住转义它:
You can also access prototype from inside template by calling roles.vars.prototype and use it later in your JS. If you want to put it into data-prototype attribute of div (as it is normally rendered) you have to remember to escape it:
文档中推荐的方法 允许您在应用程序内轻松地独立定制每个集合,所有这些都在同一个文件中。
创建文件
prototype_layout.html.twig
:块的名称很重要。如果您的父表单名为
MyformType
,则第一部分将为_myform
;如果拥有该集合的表单字段名为_mycollection
,则第二部分将为_mycollection
。第三部分必须始终为_entry_row
才能使其正常工作。例如,如果您有一个
UserType
表单,其中包含'books 的集合'
块名称可能是_user_books_entry_row
为了确保名称正确,请添加一个子表单(通过单击“添加”按钮使用 javascript 添加子表单)并检查相应选择 html 的 id元素使用浏览器的检查器工具。
如果它看起来像
user_books_0_title
,那么块名称将为_user_books_entry_row
在
config.yml 的 twig 部分声明此文件作为全局表单主题< /代码>:
<前><代码>树枝:
表单主题:
- 'AppBundle:Form:prototype_layout.html.twig' #如果您将文件保存在其他地方,请调整此路径
您还可以直接在表单视图中使用该文件:
{% use "AppBundle:Form:prototype_layout.html.twig" %}
The method recommended in the docs allows you to easily customize each collection independently inside your app, all within the same file.
Create a file
prototype_layout.html.twig
:The name of the block is important. The first part will be
_myform
if your parent form is calledMyformType
and the second part_mycollection
if your form field owning the collection is called so. The third part must always be_entry_row
in order for this to work.For example, if you have a
UserType
form with a collection of'books'
the block name might be_user_books_entry_row
To make sure you got the name right, add a subform (by clicking the add button adding subforms with javascript) and inspect the id of the corresponding select html element using the inspector tool of your browser.
If it looks like
user_books_0_title
, then the block name will be_user_books_entry_row
Declare this file as a global form theme in the twig section of
config.yml
:You can also use the file directly in your form view:
{% use "AppBundle:Form:prototype_layout.html.twig" %}