Operador ternario de ramita, abreviatura if-then-else


149

¿Twig admite operador ternario?

Necesito alguna lógica condicional como:

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

pero usando taquigrafía en Twig.


¿Podría por favor considerar cambiar la respuesta aceptada? Creo que el mío es más completo y útil para la comunidad, ya que cubre todos los tipos de taquigrafía en Twig.
Pmpr

Respuestas:


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

El operador ternario está documentado en ' otros operadores '


1
Esto es muy útil en situaciones como marcar un botón o elemento como activo para la página actual.
Vahid Amiri

Si es VERDADERO, ¿cómo se realiza la impresión de skill.id? (en lugar de "seleccionado").
gdaniel

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

Gracias. He tenido problemas al imprimir variables de ramita cuando estoy dentro de los condicionales en línea. Voy a intentar esto.
gdaniel

Me pregunto si se supone que esto puede funcionar en línea para agregar un valor de atributo como una clase css. No parece funcionar para mí: <div class="my-section {{ model.event.eventDate ? 'half' : '' }}">- querer agregar una clase css aquí según la condición.
Jordania

114

Puede usar la sintaxis abreviada a partir de Twig 1.12.0

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

82

Se agregó soporte para el operador ternario extendido en Twig 1.12.0 .

  1. Si fooecho yeselse echo no:

    {{ foo ? 'yes' : 'no' }}
  2. Si se foorepite, si no se repite no:

    {{ foo ?: 'no' }}

    o

    {{ foo ? foo : 'no' }}
  3. Si fooecho yeselse echo echo nada:

    {{ foo ? 'yes' }}

    o

    {{ foo ? 'yes' : '' }}
  4. Devuelve el valor de foosi está definido y no es nulo , de lo nocontrario:

    {{ foo ?? 'no' }}
  5. Devuelve el valor de foosi está definido ( los valores vacíos también cuentan), de lo nocontrario:

    {{ foo|default('no') }}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.