cành cây: NẾU với nhiều điều kiện


120

Có vẻ như tôi gặp vấn đề với câu lệnh if twig.

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

Lỗi là:

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

Tôi không thể hiểu tại sao điều này không hoạt động, nó giống như nếu cành cây bị mất với tất cả các đường ống.

Tôi đã thử cái này:

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

nhưng nếu cũng thất bại.

Sau đó, hãy thử điều này:

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

Và nó vẫn không hoạt động, cùng một lỗi mỗi lần ...

Vì vậy, ... điều đó dẫn tôi đến một câu hỏi thực sự đơn giản: Twig có hỗ trợ nhiều điều kiện IF không?

Câu trả lời:


287

Nếu tôi nhớ chính xác thì Twig không hỗ trợ ||&&toán tử, nhưng yêu cầu orandđược sử dụng tương ứng. Tôi cũng sẽ sử dụng dấu ngoặc đơn để biểu thị hai câu lệnh rõ ràng hơn mặc dù về mặt kỹ thuật đây không phải là một yêu cầu.

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

Biểu thức

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.

Đối với các hoạt động phức tạp hơn, tốt nhất nên đặt các biểu thức riêng lẻ trong dấu ngoặc đơn để tránh nhầm lẫn:

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

13
Và tất nhiên tôi đã không có cơ hội tìm thấy bảng tuyệt vời và tiết kiệm thời gian đó khi xem tài liệu IF: twig.sensiolabs.org/doc/tags/if.html Cảm ơn vì giải pháp!
FMaz008

5
Họ có xu hướng sử dụng wiki trên github để ghi lại mã của họ một cách kỹ lưỡng hơn. Bảng mà xuất phát từ đây
Bến Swinburne

Sử dụng! = Dường như không hiệu quả với tôi (có thể là lỗi?): {% If (key! = 'String1') hoặc (key! = 'String2') hoặc (key! = 'String3')%} vì vậy tôi phải sử dụng (key == 'stringN') cho tất cả chúng và đặt những gì tôi cần vào câu lệnh 'else'
timhc22

Bạn cần sử dụng nottoán tử để phủ định biểu thức.
Ben Swinburne

1
bạn đã quên toán tử bậc ba?
john Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.