¿Cómo verificar nulo en Twig?

Respuestas:

516

Dependiendo de lo que necesita exactamente:

  • is nullcomprueba si el valor es null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined comprueba si la variable está definida:

    {% if var is not defined %}
        {# do something #}
    {% endif %}

Además, la is sameasprueba, que realiza una comparación estricta de dos valores, puede ser de interés para verificar valores distintos de null(como false):

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
NikiC
fuente
71
Y para verificar si algo no es nulo, simplemente hazlo{% if var is not null %}
J.-BC
44
nota rápida que: $ var == null devolverá verdadero con $ var es 0, pero $ var es nulo devolverá falso
daSn0wie
También tenga en cuenta que $ var == 0 devolverá verdadero si $ var es nulo
Petter Soderlund
Además, a diferencia de la isset()función PHP , is defineddevolverá truesi se define una variable y su valor es nulo.
Pavel Petrov
1
Aviso: como Twig 2.x la verificación de la variable es igual al valor, no is_ sameasdebe verse Doc url => twig.symfony.com/doc/2.x/tests/sameas.html{% if var is same as(false) %}{% if var is sameas(false) %}
ahmed hamdy
127

Cómo establecer valores predeterminados en twig: http://twig.sensiolabs.org/doc/filters/default.html

{{ my_var | default("my_var doesn't exist") }}

O si no quieres que se muestre cuando sea nulo:

{{ my_var | default("") }}
lax4mike
fuente
1
Entonces, ¿diferencia entre undefined or emptyy null?
Fluffy
66
Parece que esta es la forma correcta de verificar ... Es una pena que no tenga muchos votos a favor.
Sr.-sk
1
Exactamente lo que estaba buscando. Tenía que asegurarme de que tienes | predeterminado, que luego puede intentar cambiar de manera predeterminada a otra variable de esta manera: {{my_var | default (my_var2)}} Acabo de probar, pero incluso puedes continuar encadenando de esta manera: {{my_var | predeterminado (my_var2) | predeterminado ("my_var y my_var2 no existen")}}
CTS_AE
34

Sin ningún supuesto, la respuesta es:

{% if var is null %}

Pero esto será cierto solo si vares exactamente NULL, y no cualquier otro valor que evalúe false(como cero, cadena vacía y matriz vacía). Además, causará un error si varno está definido. Una forma más segura sería:

{% if var is not defined or var is null %}

que se puede acortar a:

{% if var|default is null %}

Si no proporciona un argumento al defaultfiltro, se supone NULL(una especie de valor predeterminado predeterminado). Entonces, la forma más corta y segura (lo sé) de verificar si una variable está vacía (nulo, falso, cadena / matriz vacía, etc.):

{% if var|default is empty %}
Jamol
fuente
7

No creo que puedas. Esto se debe a que si una variable no está definida (no establecida) en la plantilla de ramita, se ve como NULLo none(en términos de ramita). Estoy bastante seguro de que esto es para evitar que ocurran errores de acceso incorrecto en la plantilla.

Debido a la falta de una "identidad" en Twig ( ===), esto es lo mejor que puedes hacer

{% if var == null %}
    stuff in here
{% endif %}

Lo que se traduce en:

if ((isset($context['somethingnull']) ? $context['somethingnull'] : null) == null)
{
  echo "stuff in here";
}

¿Qué si su bueno en su tipo de malabares , significa que las cosas tales como 0, '', FALSE, NULL, y un var indefinido también hacer esa declaración verdadera.

Mi sugerencia es pedir que la identidad se implemente en Twig.

Kendall Hopkins
fuente
2
Kendall tiene razón al sugerir que lo implementen: no he tenido más que buenas experiencias pidiendo que se implementen cosas en el rastreador de problemas github de Twig. Son muy amables y profesionales.
Shabbyrobe
@ kendall-hopkins Tiene curiosidad, ¿cuándo es apropiado usarlo {if var is none}y cuál es el equivalente de PHP?
Sangrado
@noisebleed se {% if abcxyz is none %}convierte if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Básicamente, si el valor es indefinido o nulo, será cierto.
Kendall Hopkins
1
@noisebleed También nonees un alias para null ref .
Kendall Hopkins
El equivalente a esta respuesta también sería usar {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html que se traduce en PHP if (empty($var))que evalúa contra un valor de falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Puede también usar {% if var is same as(var) %}para identidad ( ===). twig.sensiolabs.org/doc/tests/sameas.html
fyrye
5
     //test if varibale exist
     {% if var is defined %}
         //todo
     {% endif %}

     //test if variable is not null
     {% if var is not null %}
         //todo
     {% endif %}
thepaulo
fuente
¿Por qué crees que esta respuesta es mejor que la actualmente aceptada?
STT LCU
¡Bienvenido a StackOverflow! ¿Cuál es la diferencia con la respuesta ya aceptada? ¿Está desactualizado? ¿Por qué su respuesta es mejor que las ya existentes?
Artemix
@STTLCU Él está incluido if var is not null.
crmpicco
4

También puede usar una línea para hacer eso:

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}
xavit
fuente
3

puede usar el siguiente código para verificar si

{% if var is defined %}

var is variable is SET

{% endif %}
MMHMasud
fuente
0

Además, si su variable es un ARRAY , también hay algunas opciones:

{% if arrayVariable[0] is defined %} 
    #if variable is not null#
{% endif %}

O

{% if arrayVariable|length > 0 %} 
    #if variable is not null# 
{% endif %}

Esto solo funcionará si su matriz is definedAND esNULL

Cagrison
fuente