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>

По сути, для каждого элемента ввода радио создается метка, чтобы определить, является ли значение для него «Да» или «Нет». Я работаю с уже существующим дизайном, поэтому я не могу легко настроить разметку html.

Как я могу запретить радиовходам генерировать текст выбора в виде меток? Я знаю, что он вызывает блок field_label внутри, но, как вы можете видеть, мой radio_widget не ссылается на него, поэтому я немного не понимаю, как предотвратить такое поведение.

РЕДАКТИРОВАТЬ:

Чтобы быть ясным, мне нужна такая же структура, как в моем первом примере ... Я пропустил атрибуты имени и значения и т.д., но, очевидно, это просто для демонстрационных целей.


person JamesHalsall    schedule 29.11.2011    source источник


Ответы (1)


Вам нужно переопределить не блок 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 #}

И не забудьте очистить кеш, чтобы это изменение вступило в силу.

person Elnur Abdurrakhimov    schedule 29.11.2011
comment
child.get('label') у меня не сработало, а child.vars.label сработало. - person Marc Perrin-Pelletier; 10.09.2015