2010-07-16 13 views

Respuesta

423

Dependiendo de qué es exactamente lo que necesita:

  • is null comprueba si el valor es null:

    {% if var is null %} 
        {# do something #} 
    {% endif %} 
    
  • is defined comprueba si se define la variable:

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

Además la prueba is sameas, que hace una comparación estricta tipo de dos valores, puede ser de interés para la comprobación de los valores distintos de null (como false):

{% if var is sameas(false) %} 
    {# do something %} 
{% endif %} 
+1

Esta es ahora la respuesta correcta para twig –

+48

Y para comprobar si algo no es nulo, simplemente haz '{% si var no es nulo%}' –

+4

nota rápida que: $ var == null devolverá verdadero con $ var es 0, pero $ var es nulo devolverá falso – daSn0wie

5

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

Debido a la falta de una "identidad" en la ramita (===) este es el mejor que puede hacer

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

que se traduce en:

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

¿Qué si su bueno en su type juggling , significa que cosas como 0, '', FALSE, NULL, y una var indefinida también harán que esa afirmación sea verdadera.

Mi sugerencia es solicitar la implementación de la identidad en Twig.

+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 amigables y profesionales. – Shabbyrobe

+0

@ kendall-hopkins Tengo curiosidad, ¿cuándo es apropiado usar '{if var is none}' y cuál es el equivalente de PHP? – noisebleed

+0

@noisebleed '{% if abcxyz is none%}' se convierte en 'if (isset ($ context [" abcxyz "])) {$ _abcxyz_ = $ context [" abcxyz "]; } else {$ _abcxyz_ = null; } ' ' if ((null === $ _abcxyz_)) {echo "hi"; } ' Entonces, básicamente, si el valor es indefinido o nulo, será cierto. –

108

Cómo establecer valores por defecto en la rama: http://twig.sensiolabs.org/doc/filters/default.html

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

O si no desea que se muestre cuando nulo:

{{ my_var | default("") }} 
+0

Entonces, ¿diferencia entre 'indefinido o vacío' y' nulo'? – Fluffy

+6

Parece que esta es la forma correcta de comprobar ... Es una pena que no tenga muchos votos ascendentes. –

+1

Exactamente lo que estaba buscando. Tuve que asegurarme de que tienes | valor predeterminado, que luego puede intentar establecer el valor predeterminado para otra variable como así: {{my_var | predeterminado (my_var2)}} Acabo de probar, pero puede continuar encadenando de la siguiente manera: {{my_var | predeterminado (my_var2) | predeterminado ("my_var y my_var2 no existen")}} –

3

se puede utilizar el siguiente código para comprobar si

{% if var is defined %} 

var is variable is SET 

{% endif %} 
30

Sin ninguna hipótesis, la respuesta es:

{% if var is null %} 

Pero esto sólo será verdadera si var es exactamente NULL, y no cualquier otro valor que evalúa a false (como cero, cadena vacía y matriz vacía). Además, causará un error si var no está definido.Una forma más segura sería:

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

que puede ser acortado a:

{% if var|default is null %} 

Si usted no proporciona un argumento para el filtro default, asume NULL (tipo de defecto por defecto). Por lo que el camino más corto y más seguro (sé) para comprobar si una variable está vacía (nulo, falso, cadena vacía/matriz, etc):

{% if var|default is empty %} 
4
 //test if varibale exist 
    {% if var is defined %} 
     //todo 
    {% endif %} 

    //test if variable is not null 
    {% if var is not null %} 
     //todo 
    {% endif %} 
+0

¿Por qué cree que esta respuesta es mejor que la actualmente aceptada? –

+0

¡Bienvenido a StackOverflow! ¿Cuál es la diferencia de la respuesta ya aceptada? ¿Está desactualizado? ¿Por qué tu respuesta es mejor que las ya existentes? – Artemix

+0

@STTLCU Está incluyendo 'si var no es nulo'. – crmpicco

0

También puede utilizar una línea de hacerlo:

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}