Symfony Bootstrap 4 Наследование макета формы - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь переопределить некоторые поля bootstrap_4_layout.html.twig, но я обнаружил некоторые проблемы с блоком radio_widget. Мне нужно изменить элемент div на метку, но когда я переопределяю блок, радиоэлемент дублируется при просмотре. Рассматриваемый div с классом custom-control

{% block radio_widget %}
    {% set parent_label_class = parent_label_class|default(label_attr.class|default('')) %}
    {% if 'radio-custom' in parent_label_class %}
        {% set attr = attr|merge({class: (attr.class|default('') ~ ' custom-control-input')|trim}) %}
        <div class="custom-control custom-radio{{ 'radio-inline' in parent_label_class ? ' custom-control-inline' }}">
            {{ form_label(form, null, { widget: parent() }) }}
        </div>
    {% else %}
        {% set attr = attr|merge({class: (attr.class|default('') ~ ' form-check-input')|trim}) %}
        <div class="form-check{{ 'radio-inline' in parent_label_class ? ' form-check-inline' }}">
            {{ form_label(form, null, { widget: parent() }) }}
        </div>
    {% endif %}
{% endblock radio_widget %}

Анализируя дом с консоли, я вижу, что созданы два элемента с custom-control классом. Почему?

enter image description here

1 Ответ

0 голосов
/ 05 мая 2018

Я нашел решение. Я переопределил блок radio_widget и изменил элемент div с меткой:

{% block radio_widget %}
    {% set parent_label_class = parent_label_class|default(label_attr.class|default('')) %}
    {% if 'radio-custom' in parent_label_class %}
        {% set attr = attr|merge({class: (attr.class|default('') ~ ' custom-control-input')|trim}) %}
        <label class="custom-control custom-radio{{ 'radio-inline' in parent_label_class ? ' custom-control-inline' }}">
            {{ form_label(form, null, { widget: parent() }) }}
        </label>
    {% else %}
        {% set attr = attr|merge({class: (attr.class|default('') ~ ' form-check-input')|trim}) %}
        <div class="form-check{{ 'radio-inline' in parent_label_class ? ' form-check-inline' }}">
            {{ form_label(form, null, { widget: parent() }) }}
        </div>
    {% endif %}
{% endblock radio_widget %}

Затем я переопределяю также блок checkbox_radio_label . Внутри я подставил базовый код:

// ...
{{ widget|raw }}
// ...

С:

{% set attr = attr|merge({class: (attr.class|default('') ~ ' custom-control-input')|trim}) %}
<input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />

Для справки о блоках начальной загрузки 4 перейдите по этой ссылке: https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_4_layout.html.twig

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