Question

Je tente de personnaliser la mise en page de formulaire à l'aide Brindille dans Symfony2. Je vise à rendre une entrée radio qui ressemble à quelque chose comme ça ...

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

Je le bloc substituée radio_widget dans mon thème de formulaire personnalisé comme suit

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

Cependant, cela rend le balisage suivant:

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

En fait, pour chaque élément d'entrée radio la création d'une étiquette pour déterminer si la valeur est Oui ou Non, je travaille avec une conception préexistante, donc je ne peux pas facilement modifier le code html balisage.

Comment puis-je empêcher les entrées de radio de la génération des textes de sélection comme les étiquettes? Je sais qu'il appelle le bloc field_label en interne, mais comme vous pouvez voir mon radio_widget ne fait pas référence à elle, donc je suis un peu perdu quant à la façon d'éviter ce comportement.

EDIT:

Pour être clair, je veux le même genre de structure que mon premier exemple ... Je l'ai laissé le nom et la valeur des attributs, etc., mais il est évident que son à des fins de démonstration.

Était-ce utile?

La solution

Ce que vous devez override est pas le bloc radio_widget, mais celui de 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 #}

Et ne pas oublier de vider le cache pour que cette modification prenne effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top