2012-02-06 76 views
2

我已经收集了我的表单中的隐藏字段。如何在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 %} 

但默认数据-prototype只会渲染{{form_row(role)}}(隐藏字段)。

我应该在哪里更改默认的数据原型?

没有{%块原型%}在form_div_layout.html,我可以定制....

回答

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

您也可以通过调用roles.vars.prototype访问模板内部的原型,并在稍后的JS中使用它。如果你想要把它变成DIV的数据原型属性(它应该是正常渲染),你必须记住要逃避它:

<div data-prototype="{{ form_row(roles.vars.prototype) | escape }}"> 
    {% for role in roles %} 
    <li> {{ role }} {{ form_row(role) }} </li> 
    {% endfor %} 
</div> 
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 %} 
    

块的名字是很重要的。如果您的父表单字段被称为MyformType,并且第二部分_mycollection如果您拥有集合的表单字段被称为如此,则第一部分将是_myform。第三部分必须始终为_entry_row才能正常工作。

举例来说,如果你有一个UserType形式的'books'集合块的名称可能是_user_books_entry_row

要确保你得到了姓名权,增加一个子窗体(通过单击Add按钮添加子表单以及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" %}

+0

这个问题是5岁... – loostro 2017-11-06 21:53:35

相关问题