веточка: ЕСЛИ с несколькими условиями

120

Кажется, у меня проблема с оператором ветки if.

{%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 несколько условий IF?

FMaz008
источник

Ответы:

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 05
5
Они склонны использовать вики на github для более тщательного документирования своего кода. Эта таблица взята отсюда
Бен Суинберн
Использование! = Не помогло мне (может быть ошибка?): {% If (key! = 'String1') or (key! = 'String2') or (key! = 'String3')%} поэтому мне пришлось использовать (key == 'stringN') для всех из них и поместить то, что мне нужно, в оператор else
timhc22
Вам нужно использовать notоператор, чтобы отрицать выражение.
Бен Суинберн
1
вы забыли тернарный оператор?
Джон Смит