2011-11-29 54 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'。 –