twig: Birden çok koşul varsa


120

Dal if ifadesiyle ilgili sorunum var gibi görünüyor.

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

Hata şudur:

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

Bunun neden işe yaramadığını anlayamıyorum, sanki dal tüm borularla kaybolmuş gibi.

Bunu denedim:

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

ama eğer aynı zamanda başarısız olur.

Sonra bunu denedim:

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

Ve hala çalışmıyor, her seferinde aynı hata ...

Öyleyse ... bu beni gerçekten basit bir soruya götürüyor: Twig, birden fazla durumu EĞER destekliyor mu?

Yanıtlar:


287

Doğru hatırlıyorsam, Twig desteklemiyor ||ve &&operatörleri değil, sırasıyla orve andkullanılmasını gerektiriyor . Teknik olarak bir gereklilik olmasa da, iki ifadeyi daha net belirtmek için parantezler de kullanırım.

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

İfade

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.

Daha karmaşık işlemler için, karışıklığı önlemek için tek tek ifadeleri parantez içine almak en iyisi olabilir:

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

13
Ve elbette, IF belgelerine bakarken o harika ve zaman kazandıran tabloyu bulma şansım olmadı : twig.sensiolabs.org/doc/tags/if.html Çözüm için teşekkürler!
FMaz008

5
Kodlarını daha ayrıntılı bir şekilde belgelemek için github'daki wiki'yi kullanma eğilimindedirler. Bu masa buradan
Ben Swinburne

! = Kullanımı benim için işe yaramadı (bir hata olabilir mi?): {% İf (key! = 'String1') veya (key! = 'String2') veya (key! = 'String3')%} bu yüzden hepsi için (key == 'stringN') kullanmalı ve ihtiyacım olanı 'else' ifadesine
koymalıydım

notİfadeyi reddetmek için operatörü kullanmanız gerekir .
Ben Swinburne

1
Üçlü operatörü unuttunuz?
John Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.