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


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

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

Вместо

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

В собственном движке шаблонов php.

Author: Trix, 2012-08-06

3 answers

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

Троичный оператор задокументирован в разделе 'другие операторы'

 189
Author: Ben Swinburne, 2012-08-05 21:51:14

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

{{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }}
{{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}
 83
Author: mgalic, 2014-07-21 07:32:28

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

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

  1. Случай № 1

    Фрагмент:

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

    Оценивает:

    Если foo эхо yes еще эхо no


  2. Случай № 2

    Фрагмент:

    {{ foo ?: 'no' }}
    

    Или

    {{ foo ? foo : 'no' }}
    

    Оценивает:

    Если foo повторит это, еще эхо no


  3. Случай № 3

    Фрагмент:

    {{ foo ? 'yes' }}
    

    Или

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

    Оценивает:

    Если foo эхо yes еще ничего не эхо


Оператор объединения нулей (??)

  1. Случай № 1

    Фрагмент:

    {{ foo ?? 'no' }}
    

    Оценивает:

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

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

 49
Author: Trix, 2017-10-30 20:07:16