Is it possible to use ternary operators in twig template? Now, for adding some class to DOM element depend on some condition I do like this:
{%if ability.id in company_abilities%}
<tr class="selected">
{%else%}
<tr>
{%endif%}
Instead of
<tr class="<?=in_array($ability->id, $company_abilities) ? 'selected' : ''?>">
in native php template engine.
{{ (ability.id in company_abilities) ? 'selected' : '' }}
The ternary operator is documented under 'other operators'
You can use shorthand syntax as of Twig 1.12.0
{{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }}
{{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}
The ternary operator (?:)
Support for the extended ternary operator was added in Twig 1.12.0.
Case #1
Snippet:
{{ foo ? 'yes' : 'no' }}Evaluates:
if
fooechoyeselse echonoCase #2
Snippet:
{{ foo ?: 'no' }}or
{{ foo ? foo : 'no' }}Evaluates:
if
fooecho it, else echonoCase #3
Snippet:
{{ foo ? 'yes' }}or
{{ foo ? 'yes' : '' }}Evaluates:
if
fooechoyeselse echo nothing
The null-coalescing operator (??)
Case #1
Snippet:
{{ foo ?? 'no' }}Evaluates:
Returns the value of
fooif it is defined and not null,nootherwise
Note: this is slightly different from {{ foo|default('no') }}, since the latter will be triggered also from empty values like ''.
来源:https://stackoverflow.com/questions/11820297/ternary-operators-in-twig-php-shorthand-form-of-if-then-else