ramoscello: SE con più condizioni


120

Sembra che io abbia problemi con una dichiarazione if ramoscello.

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

L'errore è:

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

Non riesco a capire perché non funziona, è come se il ramoscello fosse perso con tutti i tubi.

Ho provato questo:

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

ma anche se falliscono.

Quindi ho provato questo:

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

E ancora non funziona, stesso errore ogni volta ...

Quindi ... questo mi porta a una domanda molto semplice: Twig supporta più condizioni SE?

Risposte:


287

Se ricordo bene Twig non supporta ||e &&operatori, ma richiede ore andda utilizzare rispettivamente. Userei anche le parentesi per denotare le due affermazioni in modo più chiaro sebbene questo non sia tecnicamente un requisito.

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

espressioni

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.

Per operazioni più complesse, potrebbe essere meglio racchiudere le singole espressioni tra parentesi per evitare confusione:

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

13
E ovviamente non ho avuto la possibilità di trovare quella tabella meravigliosa e che mi ha fatto risparmiare tempo guardando la documentazione IF: twig.sensiolabs.org/doc/tags/if.html Grazie per la soluzione!
FMaz008

5
Tendono a utilizzare il wiki su GitHub per documentare in modo più approfondito il loro codice. Quel tavolo viene da qui
Ben Swinburne

L'uso di! = Non sembra funzionare per me (potrebbe essere un bug?): {% If (key! = 'String1') o (key! = 'String2') o (key! = 'String3')%} quindi ho dovuto usare (key == 'stringN') per tutti loro e mettere ciò di cui avevo bisogno
nell'istruzione

È necessario utilizzare l' notoperatore per negare l'espressione.
Ben Swinburne

1
hai dimenticato l'operatore ternario?
John Smith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.