Потрійний оператор гілочок, скорочений, якщо тоді


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
Це дуже корисно в таких ситуаціях, як позначення кнопки або елемента активними для поточної сторінки.
Вахід Амірі

Якщо ПРАВИЛЬНО, як ви ставитеся до друку. (замість "вибраного").
gdaniel

1
@gdaniel{{ (ability.id in company_abilities) ? ability.id : '' }}
Ben Swinburne

Дякую. У мене виникають проблеми з друком змінних гілочок, коли всередині вбудованих умов. Я спробую це.
gdaniel

Мені цікаво, чи передбачається, що це зможе працювати вбудовано, щоб додати значення атрибута, як клас 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.