Тернарные операторы в Twig php (сокращенная форма if-then-else)

Можно ли использовать тройные операторы в шаблоне ветки? Теперь для добавления некоторого класса в элемент DOM зависит какое-то условие, которое я делаю так:

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

Вместо

<tr class="<?=in_array($ability->id, $company_abilities) ? 'selected' : ''?>">

в собственном шаблоне шаблонов php.

Ответ 1

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

Тернарный оператор документируется в разделе других операторов

Ответ 2

Вы можете использовать сокращенный синтаксис с Twig 1.12.0

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

Ответ 3

Тернарный оператор (?:)

Поддержка расширенного тернарного оператора была добавлена ​​в Twig 1.12.0.

  • Случай №1

    Отрывок:

    {{ foo ? 'yes' : 'no' }}
    

    Оценивает:

    if foo echo yes else echo no


  • Случай № 2

    Отрывок:

    {{ foo ?: 'no' }}
    

    или

    {{ foo ? foo : 'no' }}
    

    Оценивает:

    if foo эхо, иначе echo no


  • Случай №3

    Отрывок:

    {{ foo ? 'yes' }}
    

    или

    {{ foo ? 'yes' : '' }}
    

    Оценивает:

    if foo echo yes else echo nothing


Оператор нулевой коалесценции (??)

  • Случай №1

    Отрывок:

    {{ foo ?? 'no' }}
    

    Оценивает:

    Возвращает значение foo, если оно определено и не null, no иначе

Примечание: это немного отличается от {{ foo|default('no') }}, так как последнее будет запускаться также из пустых значений, таких как ''.