2011-11-29 14 views
5

Estoy intentando personalizar los diseños de formulario usando Twig en symfony2. Mi objetivo es hacer que una entrada de radio que se ve algo como esto ...Symfony2: evitar que los widgets de radio representen etiquetas

<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> 

he anulado el bloque radio_widget en mi forma de tema personalizado de la siguiente manera

{% 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 %} 

Sin embargo, esto hace que el siguiente marcado :

<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> 

Básicamente, para cada elemento de entrada de radio de su creación de una etiqueta para identificar si el valor es Sí o No. estoy trabajando con un d preexistente esign por lo que no puedo modificar fácilmente el marcado html.

¿Cómo puedo evitar que las entradas de radio generen los textos de selección como etiquetas? Sé que llama al bloque field_label internamente, pero como puede ver, mi radio_widget no hace referencia a él, así que estoy un poco perdido en cuanto a cómo prevenir este comportamiento.

EDIT:

Para que quede claro, yo quiero el mismo tipo de estructura como mi primer ejemplo ... me han dejado fuera el nombre y atributos de valor, etc., pero, obviamente, es sólo para fines de demostración.

Respuesta

10

Lo que hay que anular no es el bloque radio_widget, pero el choice_widget uno:

{% 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 #} 

y no se olvide borrar la caché para que este cambio surta efecto.

+0

+1 increíble, voy a probar esto mañana – JamesHalsall

+0

'child.get ('label')' no funcionó, mientras que 'child.vars.label' sí. –

Cuestiones relacionadas