гілочка: ЯКЩО з декількома умовами


120

Здається, у мене проблема з гілочкою, якщо заява.

{%if fields | length > 0 || trans_fields | length > 0 -%}

Помилка:

Unexpected token "punctuation" of value "|" ("name" expected) in 

Я не можу зрозуміти, чому це не працює, це як якщо б гілка з усіма трубами загубилася.

Я спробував це:

{% set count1 = fields | length %}
{% set count2 = trans_fields | length %}
{%if count1 > 0 || count2 > 0 -%}

але якщо також не вдасться.

Потім спробував це:

{% set count1 = fields | length > 0 %}
{% set count2 = trans_fields | length > 0 %}
{%if count1 || count2 -%}

І все одно не працює, та сама помилка щоразу ...

Отже ... що приводить мене до дійсно простого питання: чи підтримує Twig кілька умов, ЯКЩО?

Відповіді:


287

Якщо я правильно пам'ятаю, Twig не підтримує ||і не працює &&, але вимагає orі andвикористовується відповідно. Я б також скористався круглими дужками для позначення обох тверджень, хоча це технічно не є вимогою.

{%if ( fields | length > 0 ) or ( trans_fields | length > 0 ) %}

Вирази

Expressions can be used in {% blocks %} and ${ expressions }.

Operator    Description
==          Does the left expression equal the right expression?
+           Convert both arguments into a number and add them.
-           Convert both arguments into a number and substract them.
*           Convert both arguments into a number and multiply them.
/           Convert both arguments into a number and divide them.
%           Convert both arguments into a number and calculate the rest of the integer division.
~           Convert both arguments into a string and concatenate them.
or          True if the left or the right expression is true.
and         True if the left and the right expression is true.
not         Negate the expression.

Для більш складних операцій, можливо, найкраще загортати окремі вирази в дужки, щоб уникнути плутанини:

{% if (foo and bar) or (fizz and (foo + bar == 3)) %}

13
І звичайно, я не мав шансів знайти цю чудову та економію часу таблицю, переглянувши документацію IF: twig.sensiolabs.org/doc/tags/if.html Дякую за рішення!
FMaz008

5
Вони схильні використовувати вікі на github для більш ретельного документування свого коду. Цей стіл походить звідси
Бен Свінберн

Використання! =, Здається, не працює для мене (може бути помилка?): {% If (key! = 'String1') або (key! = 'String2') або (key! = 'String3')%} тому мені довелося використовувати (key == 'stringN') для всіх їх і покласти те, що мені потрібно в операторі 'else'
timhc22

Вам потрібно скористатися notоператором, щоб відмінити вираз.
Бен Свінберн

1
ви забули термінального оператора?
Джон Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.