Получить количество вариантов из поля сущности в шаблоне Twig

У меня есть форма Symfony 2 для объекта Doctrine с полем выбора объекта для отношения ManyToMany. В поле выбора может не быть выбора — как я могу проверить это в Twig?

Пример. Форма предназначена для сущности «Сделка», которую можно дополнительно назначить сущности «Местоположение». Я отображаю поле сущности «Местоположение» следующим образом:

{{ form_label(edit_form.locations) }}
{{ form_errors(edit_form.locations) }}
{{ form_widget(edit_form.locations) }}

Поле настроено для отображения с флажками. Однако возможно, что записей «Местоположение» не будет. В этом случае пользователь увидит метку «Местоположения:», но не установит флажки. Я хотел бы иметь условный оператор, который отображает сообщение, что-то вроде этого:

{{ form_label(edit_form.locations) }}
{{ form_errors(edit_form.locations) }}
{{ form_widget(edit_form.locations) }}
{% if edit_form.locations.choices|length == 0 %}
  You haven't created any Locations yet!
{% endif %}

Кто-нибудь знает способ добиться этого?


person Still don't know everything    schedule 16.03.2012    source источник
comment
Сам нашел ответ, у меня недостаточно высокая репутация, чтобы так быстро ответить на свой вопрос: {% if edit_form.locations.get('choices')|length == 0 %}   -  person Still don't know everything    schedule 16.03.2012
comment
в самой новой версии следует использовать: stackoverflow.com/questions /18115245/ потому что в новых версиях этот код будет ломаться, проверено на Symfony 2.4   -  person LPodolski    schedule 20.02.2014


Ответы (2)


Просто чтобы помочь другим...
В новых версиях это будет так:

{% if edit_form.locations.vars.choices|length == 0%}

На самом деле я собирался сделать это, поэтому поделюсь:
Если у вас есть встроенная форма, и вы хотите выполнить проверку того же типа, за исключением извлечения данных из прототипа (в случае, если форма не создается с помощью каких-либо детские формы)

{% if form.childForms.vars.prototype.field.vars.choices|length == 0 %}

«childForms» — тип встроенной формы, а «field» — поле выбора, из которого вы хотите выбрать варианты...

person snoop168    schedule 12.02.2016

Нашел это:

{% if edit_form.locations.get('choices')|length == 0 %}
person Still don't know everything    schedule 19.03.2012