Comment vérifier null dans Twig?


279

Quelle construction dois-je utiliser pour vérifier si une valeur est NULL dans un modèle Twig?

Réponses:


516

Selon ce dont vous avez besoin exactement:

  • is nullvérifie si la valeur est null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined vérifie si la variable est définie:

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

De plus, le is sameastest, qui fait une comparaison stricte de type de deux valeurs, pourrait être intéressant pour vérifier des valeurs autres que null(comme false):

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

71
Et pour vérifier si quelque chose n'est pas nul, faites simplement{% if var is not null %}
J.-BC

4
note rapide que: $ var == null renverra true avec $ var est 0, mais $ var est null renverra false
daSn0wie

Notez également que $ var == 0 retournera vrai si $ var est nul
Petter Soderlund

De plus, contrairement à la isset()fonction PHP , is definedretournera truesi une variable est définie et sa valeur est nulle.
Pavel Petrov

1
Remarque: comme Twig 2.x vérifie que la variable est égale à la valeur, is_ sameasil {% if var is same as(false) %}ne faut pas {% if var is sameas(false) %}voir Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
ahmed hamdy

127

Comment définir les valeurs par défaut dans twig: http://twig.sensiolabs.org/doc/filters/default.html

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

Ou si vous ne souhaitez pas qu'il s'affiche lorsqu'il est nul:

{{ my_var | default("") }}

1
Alors, fait-il une différence entre undefined or emptyet null?
Fluffy

6
On dirait que c'est la bonne façon de vérifier ... Dommage qu'il n'y ait pas beaucoup de votes positifs.
mr-sk

1
Exactement ce que je cherchais. Je devais m'assurer que vous avez | par défaut que vous pouvez ensuite essayer par défaut sur une autre variable comme ceci: {{my_var | default (my_var2)}} Je viens de tester, mais vous pouvez même continuer à enchaîner comme ceci: {{my_var | par défaut (my_var2) | par défaut ("my_var et my_var2 n'existent pas")}}
CTS_AE

34

Sans aucune hypothèse, la réponse est:

{% if var is null %}

Mais cela ne sera vrai que si varest exactement NULL, et pas toute autre valeur évaluée false(comme zéro, chaîne vide et tableau vide). En outre, cela provoquera une erreur s'il varn'est pas défini. Un moyen plus sûr serait:

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

qui peut être raccourci à:

{% if var|default is null %}

Si vous ne fournissez pas d'argument au defaultfiltre, il suppose NULL(sorte de valeur par défaut par défaut). Donc, le moyen le plus court et le plus sûr (je sais) de vérifier si une variable est vide (null, false, chaîne / tableau vide, etc.):

{% if var|default is empty %}

7

Je ne pense pas que vous puissiez. En effet, si une variable n'est pas définie (non définie) dans le modèle de brindille, elle ressemble à NULLounone (en termes de brindille). Je suis sûr que c'est pour empêcher les erreurs d'accès incorrectes de se produire dans le modèle.

En raison de l'absence d'une "identité" dans Twig ( ===), c'est le mieux que vous puissiez faire

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

Ce qui se traduit par:

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

Qui , si votre bien à votre jonglerie de type signifie que les choses telles que 0, '',FALSE , NULLet un var non définie également cette déclaration vrai.

Ma suggestion est de demander que l'identité soit implémentée dans Twig.


2
Kendall a raison de suggérer qu'ils l'implémentent - je n'ai eu que de bonnes expériences en demandant que des choses soient implémentées sur le traqueur de problèmes de github de Twig. Ils sont très sympathiques et professionnels.
Shabbyrobe

@ kendall-hopkins Vous êtes curieux, quand est-il approprié d'utiliser {if var is none}et quel est l'équivalent PHP?
noisebleed

@noisebleed {% if abcxyz is none %}devient if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Donc, fondamentalement, si la valeur n'est pas définie ou nulle, ce sera vrai.
Kendall Hopkins le

1
@noisebleed Also noneest un alias pour null ref .
Kendall Hopkins le

L'équivalent de cette réponse serait également d'utiliser {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html qui se traduit par PHP if (empty($var))qui évalue par rapport à une valeur de falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Vous pouvez également utilisé {% if var is same as(var) %}pour l'identité ( ===). 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 %}

Pourquoi pensez-vous que cette réponse est meilleure que celle actuellement acceptée?
STT LCU

Bienvenue sur StackOverflow! Quelle est la différence avec une réponse déjà acceptée? Est-ce obsolète? Pourquoi votre réponse est meilleure que celles déjà existantes?
Artemix

@STTLCU Il inclut if var is not null.
crmpicco

4

Vous pouvez également utiliser une ligne pour ce faire:

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

3

vous pouvez utiliser le code suivant pour vérifier si

{% if var is defined %}

var is variable is SET

{% endif %}

0

De plus, si votre variable est un TABLEAU , il y a aussi peu d'options:

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

OU

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

Cela ne fonctionnera que si votre tableau is definedET estNULL

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.