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?
7 answers
Dependiendo de lo que necesite exactamente:
-
is null
comprueba si el valor esnull
:{% 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 %}
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("") }}
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 %}
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.
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 %}
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 %}
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" }}
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