Pregunta

Estoy intentando personalizar los diseños de formulario usando Twig en Symfony2. Tengo como objetivo representar una entrada de radio que se parece a esto ...

<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 radio_widget Bloquear en mi tema de forma personalizada 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, crea una etiqueta para identificar si el valor es sí o No. Estoy trabajando con un diseño preexistente, 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 field_label bloquear internamente, pero como puedes ver mi radio_widget No hace referencia a ello, así que estoy un poco perdido sobre cómo prevenir este comportamiento.

EDITAR:

Para ser claros, quiero el mismo tipo de estructura que mi primer ejemplo ... He omitido los atributos de nombre y valor, etc., pero obviamente es solo para fines de demostración.

¿Fue útil?

Solución

Lo que necesitas anular no es el radio_widget bloque, pero el choice_widget una:

{% 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 olvide borrar el caché para que este cambio surta efecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top