Тернарный оператор Twig, Сокращение if-then-else


149

Поддерживает ли Twig троичный оператор?

Мне нужна условная логика вроде:

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

но используя стенографию в Twig.


Не могли бы вы рассмотреть вопрос об изменении принятого ответа? Я думаю, что мой более всеобъемлющий и полезный для сообщества, поскольку он охватывает все виды сокращений, если в Twig.
Pmpr

Ответы:


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

Тернарный оператор задокументирован как « другие операторы »


1
Это очень полезно в таких ситуациях, как пометка кнопки или элемента как активной для текущей страницы.
Вахид Амири

Если ИСТИННО, как вы относитесь к печати. (вместо "выбрано").
Гданиэль

1
@gdaniel{{ (ability.id in company_abilities) ? ability.id : '' }}
Бен Суинберн

Спасибо. У меня были проблемы с печатью переменных веток, когда они внутри встроенных условных выражений. Я дам это попробовать.
Гданиэль

Мне интересно, если это должно быть в состоянии работать inline, чтобы добавить значение атрибута, как класс CSS? Кажется, это не работает для меня: <div class="my-section {{ model.event.eventDate ? 'half' : '' }}">- желая добавить класс CSS здесь на основе условия.
Иордания

114

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

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

82

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

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

    {{ foo ? 'yes' : 'no' }}
  2. Если fooэхо, то эхо no:

    {{ foo ?: 'no' }}

    или

    {{ foo ? foo : 'no' }}
  3. Если fooэхо yesеще эхо ничего:

    {{ foo ? 'yes' }}

    или

    {{ foo ? 'yes' : '' }}
  4. Возвращает значение, fooесли оно определено и не равно нулю , в noпротивном случае:

    {{ foo ?? 'no' }}
  5. Возвращает значение, fooесли оно определено ( пустые значения также считаются), в noпротивном случае:

    {{ foo|default('no') }}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.