Вы можете использовать расширение прут, чтобы добавить веточку «InstanceOf» оператора. Если вы не знакомы с созданием расширений twig, см. How to Write a Custom Twig Extension в документах Symfony. Существует сущность, которая дает пример Twig extension that implements an instanceof operator. Затем, чтобы проверить, если поле является использование выберите поле:
{% if value is instanceof('ChoiceType') %}
Это не так просто, как вы могли бы подумать, потому что выбор поле имеет так много вариантов. С Symfony это тема формы, которая определяет, как различные типы полей отображаются в html. Тема формы по умолчанию - form_div_layout.html.twig. Требуется около 50 строк кода для отображения поля выбора с учетом всех опций, охватываемых блоками choice_widget, choice_widget_expanded, choice_widget_collapsed and choice_widget_options
. Вы можете выбрать нужные вам биты на основе параметров, которые вы задали для своего поля выбора, и вставить их в свой шаблон ветви, но тогда установка вариантов выбора в классе формы не повлияет. Правильный способ персонализации сделать ваши варианты выбора (* при условии, что выбор не расширяется) заключается в том, чтобы переопределить блок choice_widget_options
из темы формы. Form Customization - это тема сама по себе, но самый простой подход заключается в том, чтобы переопределить блок как одноразовый шаблон вашей ветки и затем изменить его для удовлетворения ваших потребностей, например.
{% extends '::base.html.twig' %}
{% form_theme form _self %}
{%- block choice_widget_options -%}
{% for group_label, choice in options %}
{%- if choice is iterable -%}
<optgroup label="{{ choice_translation_domain is sameas(false) ? group_label : group_label|trans({}, choice_translation_domain) }}">
{% set options = choice %}
{{- block('choice_widget_options') -}}
</optgroup>
{%- else -%}
{% set attr = choice.attr %}
<option value="{{ choice.value }}" {{ block('attributes') }}{% if choice is selectedchoice(value) %} selected="selected"{% endif %}>{{ choice_translation_domain is sameas(false) ? choice.label : choice.label|trans({}, choice_translation_domain) }}</option>
{%- endif -%}
{% endfor %}
{%- endblock choice_widget_options -%}
{% block content %}
{# ... render the form #}
{{ form_row(form.doctor_service_id, {'attr':{'class':'form-control'}}) }}
{% endblock %}
Если вам не нужно, чтобы настроить отображение вашего выбора поля, но просто хотят, чтобы получить данные, чтобы сделать что-то еще с ним, тем лучшим, что нужно сделать, это передать данные (т.е. отображается в поле выбора) на шаблон ветви вместе с формой и использовать ее напрямую. Если это не вариант, можно повторить выбор, как в теме формы, хотя вам может потребоваться учитывать предпочтительные варианты. Простейшим случаем является, например,
{% for choice in form.doctor_service_id.vars.choices %}
{{ choice.label }}
{{ choice.value }}
{% endfor %}