galho: IF com múltiplas condições


120

Parece que tenho problemas com a declaração if do twig.

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

O erro é:

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

Não consigo entender por que isso não funciona, é como se um galho se perdesse com todos os canos.

Eu tentei isso:

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

mas o se também falhar.

Então tentei isto:

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

E ainda não funciona, mesmo erro todas as vezes ...

Então ... isso me leva a uma pergunta realmente simples: o Twig suporta múltiplas condições IF?

Respostas:


287

Se bem me lembro Twig não suporta ||e &&operadores, mas requer ore andpara ser usado respectivamente. Eu também usaria parênteses para denotar as duas declarações mais claramente, embora isso não seja tecnicamente um requisito.

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

Expressões

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 operações mais complexas, pode ser melhor envolver as expressões individuais entre parênteses para evitar confusão:

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

13
E é claro que não tive chance de encontrar aquela tabela maravilhosa e que economiza tempo ao olhar a documentação do IF: twig.sensiolabs.org/doc/tags/if.html Obrigado pela solução!
FMaz008

5
Eles tendem a usar o wiki no github para documentar mais detalhadamente seu código. Essa mesa vem daqui
Ben Swinburne

Usar! = Não pareceu funcionar para mim (pode ser um bug?): {% If (key! = 'String1') or (key! = 'String2') or (key! = 'String3')%} então eu tive que usar (key == 'stringN') para todos eles e colocar o que eu precisava na declaração 'else'
timhc22

Você precisa usar o notoperador para negar a expressão.
Ben Swinburne de

1
você esqueceu o operador ternário?
john Smith
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.