Форма на основе Symfony 3.4 содержит несколько полей CheckboxType
. Некоторые из этих полей должны отображаться как обычные флажки (= с использованием виджета флажков по умолчанию), а некоторые другие должны отображаться как переключатели включения / выключения (например, iOS UISwitche
).
Итак, внутри одной формы поля одного и того же типа (CheckboxType
) должны использовать разные виджеты. Как я могу это сделать?
Решение 1: Конечно, я могу применить пользовательский form_theme
к полной форме ({% form_theme form 'AppBundle:Form:myTheme.html.twig' %}
). Но это эффект всех чекбоксов внутри формы, а не только одного. Так что это не решение.
Решение 2: Решение, которое будет работать, - применить другой виджет к одному определенному полю c, используя его идентификатор:
{% block _user_registration_form_someCheckBoxRow %}
...
{% endblock %}
Пока это решение работает, мне пришлось бы создавать / переопределять одни и те же блоки для всех задействованных полей во всех задействованных формах. Это довольно громоздкое и поэтому не очень хорошее решение.
Решение 3: Другое решение, которое будет работать, - создать собственный FormType
, который будет использоваться флажками, которые должны отображаться как переключатели. Этот тип формы будет расширять CheckboxType
и ничего не делать, кроме как переопределять blockPrefix
.
Хотя это довольно близко к хорошему решению, есть один серьезный недостаток: предположим, что существуют разные темы / виджеты для переключателей флажков. Один с меткой сверху, другой с меткой рядом с переключателем и т. Д. c. Для каждого из этих стилей потребуется не только собственный виджет, но и свой собственный тип формы, который необходимо зарегистрировать в FormPass.php
, et c. Это, конечно, сработает, но также довольно громоздко и подвержено ошибкам.
Итак, это было бы решением, но не nice
.
Нет лучшего способа ? Я искал что-то вроде {{ form_row(form.someCheckbox, 'someWidget') }}
. Для каждой темы будет только один дополнительный файл, и можно будет точно сказать, какое поле использует какую тему. Никаких дополнительных классов, конфигов и т. Д. c. необходимо. Ничего подобного не нашел.
Действительно ли использование фиктивных форм является лучшим решением?