ranting: JIKA dengan banyak kondisi

120

Sepertinya saya bermasalah dengan pernyataan ranting if.

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

Kesalahannya adalah:

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

Saya tidak mengerti mengapa ini tidak berhasil, seperti jika ranting hilang dengan semua pipa.

Saya sudah mencoba ini:

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

tetapi jika juga gagal.

Kemudian coba ini:

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

Dan itu masih tidak berhasil, kesalahan yang sama setiap saat ...

Jadi ... itu membawa saya ke pertanyaan yang sangat sederhana: apakah Twig mendukung banyak kondisi IF?

FMaz008
sumber

Jawaban:

287

Jika saya ingat dengan benar Twig tidak mendukung ||dan &&operator, tetapi membutuhkan ordan anddigunakan masing-masing. Saya juga menggunakan tanda kurung untuk menunjukkan dua pernyataan dengan lebih jelas meskipun ini secara teknis bukan persyaratan.

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

Ekspresi

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.

Untuk operasi yang lebih kompleks, mungkin yang terbaik adalah membungkus ekspresi individu dalam tanda kurung untuk menghindari kebingungan:

{% if (foo and bar) or (fizz and (foo + bar == 3)) %}
Ben Swinburne
sumber
13
Dan tentu saja saya tidak memiliki kesempatan untuk menemukan tabel yang bagus dan hemat waktu ketika melihat dokumentasi IF: twig.sensiolabs.org/doc/tags/if.html Terima kasih atas solusinya!
FMaz008
5
Mereka cenderung menggunakan wiki di github untuk mendokumentasikan kode mereka secara lebih menyeluruh. Tabel itu berasal dari sini
Ben Swinburne
Menggunakan! = Sepertinya tidak berhasil untuk saya (mungkin bug?): {% If (key! = 'String1') atau (key! = 'String2') atau (key! = 'String3')%} jadi saya harus menggunakan (key == 'stringN') untuk semuanya dan memasukkan apa yang saya butuhkan di pernyataan 'else'
timhc22
Anda perlu menggunakan notoperator untuk meniadakan ekspresi tersebut.
Ben Swinburne
1
Anda lupa operator terner?
john Smith