2012-02-06 82 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

相關問題