Переопределение виджета радио symfony


Виджет радио по умолчанию создает следующую структуру:

<label>...</label>
<div id="...">
<div class="clearfix prettyradio labelright  blue">
<input type="radio" id="..._0" name="..." value="..." style="display: none;">
<a href="#" class=""></a>
...
</div>

Я нашел блок radio_widget, но он содержит только сам вход. Так что я могу настроить там только эту часть:

<input type="radio" id="..._0" name="..." value="1" style="display: none;">

Но я не могу понять, как полностью изменить структуру поля выбора радио?

Кроме того, кто-нибудь знает, почему symfony добавляет display:none на вход?

Спасибо.

Author: Hast, 2012-12-10

2 answers

Если вы используете Тип радиополя , вы можете настроить только часть input блока radio_widget, вызвав form_widget(form.yourField), все, что он отображает,

{% block radio_widget %}
{% spaceless %}
    <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{% endspaceless %}
{% endblock radio_widget %}

Но если вы используете Тип поля выбора для отображения радиополей (expanded => true and multiple => false). Затем вам придется переопределить блок choice_widget, который вызывает для каждого дочернего элемента блок radio_widget, окруженный глобальным div

Как вы получили "дисплей: нет"? потому что в блоке по умолчанию такого стиля нет.

 6
Author: Ahmed Siouani, 2012-12-10 19:56:19

Если вы специально хотите переопределить способ отображения отдельного радиополя, т.Е. Способ отображения каждого поля ввода в группе, используйте эту формулу для имени блока:

_<form name>_<field name>_entry_widget

Обратите внимание на этот бит: _entry

Если вы используете расширенное поле выбора ..._entry_row и ..._entry_label не будут работать, потому что они не используются для отдельных вариантов выбора - по крайней мере, для переключателей.

В более общем плане вы можете многое узнать о том, какой блок Symfony намеревается использовать во время следующий вызов функции {{ form_widget(form) }} вызов функции с использованием этого кода:

{% for b in form.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}

Или вы можете посмотреть на child в некоторых ситуациях:

{% for b in child.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}
 0
Author: Henry, 2015-07-16 03:06:52