Переопределение поля формы флажка, создающего дублирующую метку и отсутствие поля в Symfony 4.4

У меня возникли проблемы с переопределением поля флажка в моей форме Symfony внутри моего шаблона Twig.

Я создаю поле со следующим кодом в моем шаблоне Twig:

{{ form_row(form.legal, {
   'label' : 'personal.form.fields.legal'|trans,
}) }}

В том же шаблоне у меня есть следующий блок, в котором я пытаюсь настроить метку. Обратите внимание, что приведенный выше перевод включает HTML, поэтому мне нужен фильтр raw.

{% block _crmpiccobundle_details_legal_label %}
    {% apply spaceless %}
        <label{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}>
            {{ label|unescape|raw }}
        </label>
    {% endapply %}
{%- endblock %}

К сожалению, это не работает, и у меня странным образом остается нет флажка и дублирующийся ярлык, и я не могу понять, почему.

Я думаю, вам нужно добавить {{- widget | raw}} перед {{label | unescape | raw}}

Vyctorya 07.04.2021 14:50

@Vyctorya Спасибо за комментарий, но это не подействовало. Кроме того, я не уверен, что это правильный синтаксис.

crmpicco 08.04.2021 05:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
2
24
1

Ответы 1

Похоже, вы используете тему формы на основе начальной загрузки (например, bootstrap_4_layout.html.twig или bootstrap_3_layout.html.twig)

Попробуйте сделать так:

{% block _crmpiccobundle_details_legal_label %}
    {%- if widget is defined -%}
        {{ widget|raw }}
        
        {% apply spaceless %}
            <label{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}>
                {{ label|unescape|raw }}
            </label>
        {% endapply %}
        
    {%- endif -%}
{%- endblock %}

В макете начальной загрузки часть виджета должна быть обернута в метку, поэтому тема вызывает один и тот же блок дважды, сначала для части _label и второй раз для _widget. Для второго вызова тема предоставляет переменную widget, которую вы должны визуализировать самостоятельно (иначе вы бы не увидели свой флажок). Кроме того, вы должны подавить отображение метки дважды, что можно сделать, просто проверив, определен ли виджет.

Посмотрите, как исходный блок также проверяет, позволяет ли widget is defined избежать рендеринга двойной метки:

https://github.com/symfony/symfony/blob/e2f430dfb4c0c8cdde01ed111f4f0851e268ab5a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.#L83.

Другие вопросы по теме