Zweig: WENN mit mehreren Bedingungen

120

Es scheint, ich habe ein Problem mit einer Zweig-if-Anweisung.

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

Der Fehler ist:

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

Ich kann nicht verstehen, warum das nicht funktioniert. Es ist, als ob der Zweig mit allen Rohren verloren gegangen wäre.

Ich habe das versucht:

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

aber das wenn auch scheitern.

Dann versuchte dies:

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

Und es funktioniert immer noch nicht, jedes Mal der gleiche Fehler ...

Also ... das führte mich zu einer wirklich einfachen Frage: Unterstützt Twig mehrere Bedingungen, wenn?

FMaz008
quelle

Antworten:

287

Wenn ich mich richtig erinnere, unterstützt Twig ||und &&Operatoren nicht, sondern erfordert orund andmuss verwendet werden. Ich würde auch Klammern verwenden, um die beiden Aussagen klarer zu kennzeichnen, obwohl dies technisch nicht erforderlich ist.

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

Ausdrücke

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.

Bei komplexeren Operationen ist es möglicherweise am besten, einzelne Ausdrücke in Klammern zu setzen, um Verwirrung zu vermeiden:

{% if (foo and bar) or (fizz and (foo + bar == 3)) %}
Ben Swinburne
quelle
13
Und natürlich hatte ich keine Chance, diese wunderbare und zeitsparende Tabelle zu finden, wenn ich mir die IF-Dokumentation ansah : twig.sensiolabs.org/doc/tags/if.html Vielen Dank für die Lösung!
FMaz008
5
Sie neigen dazu, das Wiki auf Github zu verwenden, um ihren Code gründlicher zu dokumentieren. Dieser Tisch kommt von hier
Ben Swinburne
Die Verwendung von! = Schien bei mir nicht zu funktionieren (kann ein Fehler sein?): {% If (key! = 'String1') oder (key! = 'String2') oder (key! = 'String3')%} Also musste ich (key == 'stringN') für alle verwenden und das, was ich brauchte, in die '
else'
Sie müssen den notOperator verwenden, um den Ausdruck zu negieren.
Ben Swinburne
1
Sie haben den ternären Operator vergessen?
John Smith