2012-12-10 12 views
2

默認無線電插件創建一個以下結構:重寫symfony的無線電插件

<label>...</label> 
<div id="..."> 
<div class="clearfix prettyradio labelright blue"> 
<input type="radio" id="..._0" name="..." value="..." style="display: none;"> 
<a href="#" class=""></a> 
... 
</div> 

我發現radio_widget塊,但它僅包含一個輸入本身。所以我可以自定義只有這部分:

<input type="radio" id="..._0" name="..." value="1" style="display: none;"> 

但我不明白如何改變整個無線電選擇領域的結構?

另外,有誰知道,爲什麼symfony增加顯示:無輸入?

謝謝。

回答

6

如果你使用Radio Field Type,您可以通過調用form_widget(form.yourField)定製只有radio_widget塊的input一部分,所有它顯示是,

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

但是如果你使用Choice Field Type顯示無線電場(expanded => true and multiple => false) 。然後你必須重寫choice_widget塊,該塊要求每個子元素radio_widget塊被全局包圍div

你是如何得到「display:none」的?因爲在默認塊中沒有這樣的風格。

+0

謝謝。關於「dysplay:none」呢 - 源代碼中沒有這樣的部分,它只出現在螢火蟲中。所以一切都很好! – Hast

+0

而且,我是否可以自定義一個特定字段的widjet塊?例如,我想要一些單選按鈕以自定義結構顯示,而其他按鈕則默認顯示。 – Hast

+0

我可以自定義一個表格行,比如:'_prefix_fieldname_row',但那個選擇字段結構呢? – Hast

0

如果你特別要覆蓋一個單獨的射頻場呈現的方式 - 即如何在組中的每個輸入字段渲染 - 使用這個公式塊名稱:

_<form name>_<field name>_entry_widget 

注意此位:_entry

如果您使用擴展的選擇字段..._entry_row..._entry_label將不起作用,因爲它們不用於單個選擇 - 至少適用於單選按鈕。

更一般的,你可以找到很多關於阻斷的Symfony打算使用此代碼以便下次調用時用來{{ form_widget(form) }}函數調用:

{% for b in form.vars.block_prefixes %} 
    {{ dump(b) }} 
{% endfor %} 

,或者你可能想看看在某些情況下child

{% for b in child.vars.block_prefixes %} 
    {{ dump(b) }} 
{% endfor %}