2011-11-29 52 views
5

我試圖在symfony2中使用Twig自定義窗體佈局。我的目標,以使無線輸入,看起來像這樣...Symfony2:防止無線窗口小部件呈現標籤

<label class=" required">Label name</label> 
<span class="form-radio"> 
    <input type="radio" name="album_has_subalbums_1" /> Yes 
</span> 
<span class="form-radio"> 
    <input type="radio" name="album_has_subalbums_0" /> No 
</span> 

我在自定義表單的主題覆蓋了radio_widget塊如下

{% block radio_widget %} 
{% spaceless %} 
    <span class='form-radio'> 
     <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} /> 
    </span> 
{% endspaceless %} 
{% endblock radio_widget %} 

然而,這使得下面的標記:

<label class=" required">Label name</label> 

<span class="form-radio"> 
    <input type="radio" id="album_has_subalbums_1" name="album[has_subalbums]" required="required" value="1"> 
</span> 
<label for="album_has_subalbums_1" class=" required">Yes</label> 

<span class="form-radio"> 
    <input type="radio" id="album_has_subalbums_0" name="album[has_subalbums]" required="required" value="0"> 
</span> 
<label for="album_has_subalbums_0" class=" required">No</label> 

基本上,對於每個無線電輸入元件其創建標籤,以確定它的值是否爲是或否。我與預先存在的d工作設計,所以我不能輕鬆調整HTML標記。

如何防止無線電輸入生成選擇文本作爲標籤?我知道它在內部調用field_label塊,但正如你所看到的我的radio_widget沒有提及它,所以我有點失去了如何防止這種行爲。

編輯:

要清楚,我想同一種結構,作爲我的第一個例子......我已經離開了名稱和值的屬性等,但很明顯,它只是用於演示目的。

回答

10

你需要重寫什麼是不是radio_widget塊,但choice_widget一個:

{% block choice_widget %} 
{% spaceless %} 
    {% if expanded %} 
     <div {{ block('widget_container_attributes') }}> 
     {% for child in form %} 
      {{ form_widget(child) }} 
      {{ child.get('label') | trans }} {# <- this is what you need #} 
    {# leave the rest untouched #} 

而且不要忘記清除緩存,此更改生效。

+0

+1真棒,明天我會給出這個答案 – JamesHalsall

+0

'child.get('label')'不適合我,而'child.vars.label'。 –