Symfony2: предотвращение отрисовки ярлыков на радио виджетах - PullRequest
5 голосов
/ 29 ноября 2011

Я пытаюсь настроить макеты форм, используя 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 не ссылается на него, поэтому я немного растерялся относительно того, как предотвратить это поведение.

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

Для ясности, я хочу такую ​​же структуру, как в моем первом примере ... Я пропустил атрибуты name и value и т. Д., Но, очевидно, это только для демонстрационных целей.

1 Ответ

10 голосов
/ 30 ноября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...