Cómo comprobar si hay null en Twig?


¿Qué construcción debo usar para comprobar si un valor es NULO en una plantilla de Ramita?

Author: dreftymac, 2010-07-16

7 answers

Dependiendo de lo que necesite exactamente:

  • is null comprueba 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,is sameas prueba, que hace una comparación estricta del tipo de dos valores, podría ser de interés para la comprobación de valores distintos de null (como false):

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
 464
Author: NikiC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-07 15:28:55

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 null:

{{ my_var | default("") }}
 111
Author: lax4mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-18 23:12:06

Sin ninguna suposición la respuesta es:

{% if var is null %}

Pero esto será cierto solo si var es exactamente NULL, y no cualquier otro valor que evalúe 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 se puede acortar a:

{% if var|default is null %}

Si no proporciona un argumento para el filtro default, asume NULL (tipo de valor predeterminado por defecto). Así que el camino más corto y seguro (lo sé) para comprobar si una variable está vacía (null, false, cadena/array vacía, etc.):

{% if var|default is empty %}
 33
Author: Jamol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-22 10:51:14

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

Debido a la falta de una "identidad" en Ramita (===) esto es lo mejor que puede hacer

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

Que se traduce como:

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

Que si eres bueno en tu tipo malabares , significa que cosas como 0, '', FALSE, NULL, y una undefined var también hará que esa declaración sea verdadera.

Mi sugerencia es pedir que la identidad sea implementada en Twig.

 6
Author: Kendall Hopkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-16 13:56:16
     //test if varibale exist
     {% if var is defined %}
         //todo
     {% endif %}

     //test if variable is not null
     {% if var is not null %}
         //todo
     {% endif %}
 5
Author: thepaulo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-28 07:46:47

Puede utilizar el siguiente código para comprobar si

{% if var is defined %}

var is variable is SET

{% endif %}
 3
Author: M.M.H.Masud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-26 10:06:09

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

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}
 1
Author: xavit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-21 20:55:17