twig: หากมีหลายเงื่อนไข


120

ดูเหมือนว่าฉันมีปัญหากับคำสั่ง twig if

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

ข้อผิดพลาดคือ:

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

ฉันไม่เข้าใจว่าทำไมมันถึงใช้ไม่ได้มันเหมือนกับว่ากิ่งไม้หายไปกับท่อทั้งหมด

ฉันได้ลองแล้ว:

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

แต่ถ้าล้มเหลวด้วย

จากนั้นลองทำสิ่งนี้:

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

แล้วก็ยังใช้ไม่ได้ error เหมือนเดิมทุกครั้ง ...

นั่นทำให้ฉันไปสู่คำถามง่ายๆ: Twig รองรับหลายเงื่อนไข IF หรือไม่?

คำตอบ:


287

ถ้าฉันจำได้อย่างถูกต้อง Twig ไม่รองรับ||และ&&ตัวดำเนินการ แต่ต้องใช้orและandต้องใช้ตามลำดับ ฉันยังใช้วงเล็บเพื่อแสดงข้อความทั้งสองให้ชัดเจนยิ่งขึ้นแม้ว่าจะไม่ใช่ข้อกำหนดทางเทคนิคก็ตาม

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

การแสดงออก

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.

สำหรับการดำเนินการที่ซับซ้อนมากขึ้นอาจเป็นการดีที่สุดที่จะรวมแต่ละนิพจน์ไว้ในวงเล็บเพื่อหลีกเลี่ยงความสับสน:

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

13
และแน่นอนว่าฉันไม่มีโอกาสพบตารางที่ยอดเยี่ยมและประหยัดเวลาเมื่อดูเอกสาร IF: twig.sensiolabs.org/doc/tags/if.html ขอบคุณสำหรับวิธีแก้ปัญหา!
FMaz008

5
พวกเขามักจะใช้ wiki บน github เพื่อจัดทำโค้ดของตนให้ละเอียดมากขึ้น ตารางนั้นมาจากที่นี่
Ben Swinburne

การใช้! = ดูเหมือนจะไม่ได้ผลสำหรับฉัน (อาจเป็นบั๊ก?): {% if (key! = 'string1') or (key! = 'string2') or (key! = 'string3')%} ดังนั้นฉันจึงต้องใช้ (key == 'stringN') สำหรับพวกเขาทั้งหมดและใส่สิ่งที่ฉันต้องการในคำสั่ง 'else'
timhc22

คุณต้องใช้ตัวnotดำเนินการเพื่อลบล้างนิพจน์
Ben Swinburne

1
คุณลืมตัวดำเนินการ ternary?
john Smith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.