Twig三元运算符,简写的if-then-else

204

Twig是否支持三元运算符(简写的if-else)?

我需要一些条件逻辑,如:

{%if ability.id in company_abilities %}
    <tr class="selected">
{%else%}
    <tr>
{%endif%}

但在Twig中使用缩写。

5个回答

385
{{ (ability.id in company_abilities) ? 'selected' : '' }}

三元运算符的文档位于“其他运算符”下。


2
这在标记当前页面的按钮或项目为活动状态等情况下非常有帮助。 - Vahid Amiri
1
如果为TRUE,您如何打印ability.id?(而不是“selected”)。 - gdaniel
2
@gdaniel {{ (ability.id 在 company_abilities 中) ? ability.id : '' }} - Ben Swinburne
谢谢。我在内联条件语句中打印twig变量时遇到了问题。我会尝试一下这个方法。 - gdaniel
我在想这个代码是否可以内联工作,像添加CSS类一样添加属性值?但是它对我来说似乎不起作用: <div class="my-section {{ model.event.eventDate ? 'half' : '' }}"> -- 我想根据条件在这里添加一个CSS类。 - Jordan
@Jordan 这是正确的。如果 model.event.eventDate 评估为 true,它将添加该类。从 Twig 的角度来看,它不知道任何关于类的信息,只是打印字符串,无论是类、ID、原始 HTML 还是其他所需的内容。更重要的是,它不知道关于“打印”的事情。这是由于 {{ }}。它只是一个表达式,像任何其他表达式一样进行评估,例如求和、过滤器、方法调用等。 - Xavi Montero

141

从Twig 1.12.0开始,您可以使用速记语法。

{{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }}
{{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}

文档中在哪里展示了第二个例子?我无法在任何地方找到它。 - ADJenks

121

Twig 1.12.0 添加了扩展三元运算符的支持。

  1. 如果 foo 为真则输出 yes,否则输出 no

  2. {{ foo ? 'yes' : 'no' }}
    
  3. 如果foo存在,则输出它,否则输出no

    {{ foo ?: 'no' }}
    
    {{ foo ? foo : 'no' }}
    
  4. 如果 foo 为真则输出 yes,否则不输出:

  5. {{ foo ? 'yes' }}
    
    或者
    {{ foo ? 'yes' : '' }}
    
  6. 如果foo已被定义不为null,则返回其值,否则返回no

  7. {{ foo ?? 'no' }}
    
    返回变量foo的值,如果它已经定义(包括值),则返回该值;否则返回no
  8. 如果变量foo已经定义(包括值),则返回其值,否则返回no

    {{ foo|default('no') }}
    

8
如果数据库中存在价格数据,则打印(价格为$$$),否则打印(无法获取),并在Twig中使用~进行拼接。
{{ Price is defined ? 'Price is '~Price : 'Not Available' }}

3
如果 Price 等于 0,它将被视为假并显示“不可用”,而不是0,对吗? - CheddarLizzard
1
我已经修改为被定义 - L3xpert

1

我只是将a作为通用变量名。你也可以像这样使用无限的if else:

{{ a == 1 ? 'first' : a == 2 ? 'second' : 'third' }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接