twig: SI con múltiples condiciones


120

Parece que tengo un problema con una declaración twig if.

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

El error es:

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

No puedo entender por qué esto no funciona, es como si se perdiera una ramita con todas las tuberías.

He probado esto:

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

pero el si también falla.

Luego intente esto:

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

Y todavía no funciona, el mismo error cada vez ...

Entonces ... eso me lleva a una pregunta realmente simple: ¿Twig admite múltiples condiciones SI?

Respuestas:


287

Si mal no recuerdo, Twig no admite operadores ||y &&, pero requiere ory andpara usarse respectivamente. También usaría paréntesis para denotar las dos declaraciones con mayor claridad, aunque técnicamente no es un requisito.

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

Expresiones

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.

Para operaciones más complejas, puede ser mejor envolver las expresiones individuales entre paréntesis para evitar confusiones:

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

13
Y, por supuesto, no tuve la oportunidad de encontrar esa tabla maravillosa y que ahorra tiempo al mirar la documentación de IF: twig.sensiolabs.org/doc/tags/if.html ¡ Gracias por la solución!
FMaz008

5
Tienden a usar la wiki en github para documentar más a fondo su código. Esa mesa viene de aquí
Ben Swinburne

Usar! = No pareció funcionar para mí (¿puede ser un error?): {% If (key! = 'String1') or (key! = 'String2') or (key! = 'String3')%} así que tuve que usar (key == 'stringN') para todos ellos y poner lo que necesitaba en la declaración 'else'
timhc22

Necesita usar el notoperador para negar la expresión.
Ben Swinburne

1
olvidaste el operador ternario?
john Smith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.