树枝:如果有多个条件


120

似乎我的树枝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 -%}

而且它仍然不起作用,每次都出现相同的错误...

所以...这引出我一个非常简单的问题:Twig是否支持多个条件IF?

Answers:


287

如果我没记错的话,Twig不支持||&&运算符,但要求orand分别使用。我也将使用括号更清楚地表示这两个语句,尽管从技术上讲这不是必需的。

{%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 2011年

5
他们倾向于使用github上的Wiki更彻底地记录其代码。那张桌子是从这里来的
Ben Swinburne

使用!=似乎对我不起作用(可能是一个错误?):{%if(key!='string1')或(key!='string2')或(key!='string3')%}所以我必须对所有这些都使用(key =='stringN')并将我需要的内容放在'else'语句中
timhc22

您需要使用not运算符对表达式求反。
Ben Swinburne 2014年

1
您忘记了三元运算符?
约翰·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.