Symfony2:предотвращение отображения меток виджетами радио
-
25-10-2019 - |
Вопрос
Я пытаюсь настроить макеты форм с помощью 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>
По сути, для каждого элемента радиовхода создается метка, позволяющая определить, является ли значение для него Yes или No.Я работаю с уже существующим дизайном, поэтому не могу легко настроить html-разметку.
Как я могу запретить радиовходам генерировать тексты выбора в виде меток?Я знаю, что это вызывает field_label
блокирую внутренне, но, как вы можете видеть, мой radio_widget
на это нет ссылки, поэтому я немного растерян относительно того, как предотвратить такое поведение.
Редактировать:
Чтобы было понятно, я хочу иметь такую же структуру, как в моем первом примере...Я опустил атрибуты name и value и т.д., но, очевидно, это просто для демонстрационных целей.
Решение
То, что вам нужно переопределить, - это не 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 #}
И не забудьте очистить кэш, чтобы это изменение вступило в силу.