gałązka: JEŻELI z wieloma warunkami

120

Wygląda na to, że mam problem ze stwierdzeniem gałązka if.

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

Błąd:

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

Nie rozumiem, dlaczego to nie działa, to tak, jakby gałązka została zgubiona ze wszystkimi rurami.

Próbowałem tego:

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

ale jeśli również zawodzą.

Następnie spróbowałem tego:

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

I nadal nie działa, za każdym razem ten sam błąd ...

Więc ... to prowadzi mnie do naprawdę prostego pytania: czy Twig obsługuje wiele warunków JEŻELI?

FMaz008
źródło

Odpowiedzi:

287

Jeśli dobrze pamiętam, Twig nie obsługuje operatorów ||i &&, ale wymaga odpowiednio ori anddo użycia. Użyłbym również nawiasów, aby wyraźniej oznaczyć te dwa stwierdzenia, chociaż nie jest to technicznie wymagane.

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

Wyrażenia

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.

W przypadku bardziej złożonych operacji najlepiej zawijać poszczególne wyrażenia w nawiasy, aby uniknąć nieporozumień:

{% if (foo and bar) or (fizz and (foo + bar == 3)) %}
Ben Swinburne
źródło
13
I oczywiście nie miałem szansy znaleźć tej wspaniałej i oszczędzającej czas tabeli, patrząc na dokumentację IF: twig.sensiolabs.org/doc/tags/if.html Dzięki za rozwiązanie!
FMaz008
5
Zwykle używają wiki na github, aby dokładniej dokumentować swój kod. Ten stół pochodzi stąd
Ben Swinburne,
Używanie! = Nie działa dla mnie (może to być błąd?): {% If (key! = 'String1') or (key! = 'String2') or (key! = 'String3')%} więc musiałem użyć (key == 'stringN') dla wszystkich i umieścić to, czego potrzebowałem, w instrukcji 'else'
timhc22
Musisz użyć notoperatora, aby zanegować wyrażenie.
Ben Swinburne,
1
zapomniałeś operatora trójskładnikowego?
John Smith