Jak sprawdzić zerowanie w Twig?

279

Jakiej konstrukcji należy użyć, aby sprawdzić, czy wartość w szablonie Twig ma wartość NULL?

Puszysty
źródło

Odpowiedzi:

516

W zależności od tego, czego dokładnie potrzebujesz:

  • is nullsprawdza, czy wartość jest null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined sprawdza, czy zmienna jest zdefiniowana:

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

Dodatkowo is sameastest, który dokonuje ścisłego porównania dwóch wartości, może być przydatny do sprawdzania wartości innych niż null(jak false):

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
NikiC
źródło
71
I aby sprawdzić, czy coś nie jest zerowe, po prostu zrób{% if var is not null %}
J.-BC
4
szybka uwaga, że: $ var == null zwróci true z $ var wynosi 0, ale $ var is null zwróci false
daSn0wie
Zauważ też, że $ var == 0 zwróci wartość true, jeśli $ var ma wartość null
Petter Soderlund
Ponadto, w przeciwieństwie do isset()funkcji PHP , is definedzwróci, truejeśli zmienna jest zdefiniowana, a jej wartość jest null.
Pavel Petrov
1
Uwaga: ponieważ sprawdzanie zmiennej Twig 2.x jest równe wartości, tak jak nie is_ sameasmusi być {% if var is same as(false) %}to {% if var is sameas(false) %}Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
ahmed hamdy
127

Jak ustawić wartości domyślne w gałązce: http://twig.sensiolabs.org/doc/filters/default.html

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

Lub jeśli nie chcesz, aby wyświetlał się jako null:

{{ my_var | default("") }}
lax4mike
źródło
1
Czy to odróżnia undefined or emptyi null?
Puszysty
6
Wygląda na to, że to właściwy sposób na sprawdzenie ... Szkoda, że ​​nie ma wielu pozytywnych opinii.
mr-sk
1
Dokładnie tego szukałem. Musiałem się upewnić, że masz | default, który możesz następnie spróbować użyć domyślnej innej zmiennej, takiej jak: {{my_var | default (my_var2)}} Właśnie przetestowałem, ale możesz nawet kontynuować tworzenie łańcucha w ten sposób: {{my_var | default (my_var2) | default („my_var i my_var2 nie istnieją”)}}
CTS_AE
34

Bez żadnych założeń odpowiedź brzmi:

{% if var is null %}

Ale będzie to prawdą tylko wtedy, gdy varjest dokładnie NULL, a nie jakąkolwiek inną wartością, która ma wartość false(np. Zero, pusty ciąg i pusta tablica). Poza tym spowoduje błąd, jeśli varnie zostanie zdefiniowany. Bezpieczniejszym sposobem byłoby:

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

które można skrócić do:

{% if var|default is null %}

Jeśli nie podasz argumentu do defaultfiltra, zakłada się NULL(domyślnie coś w rodzaju domyślnego). Zatem najkrótszy i najbezpieczniejszy sposób (wiem), aby sprawdzić, czy zmienna jest pusta (null, false, pusty ciąg / tablica itp.):

{% if var|default is empty %}
Jamol
źródło
7

Nie sądzę, że możesz. Wynika to z faktu, że jeśli zmienna jest niezdefiniowana (nie ustawiona) w szablonie gałązki, wygląda jak NULLlubnone (w kategoriach gałązek). Jestem prawie pewien, że ma to na celu wyeliminowanie błędów złego dostępu w szablonie.

Ze względu na brak „tożsamości” w Twig ( ===) jest to najlepsze, co możesz zrobić

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

Co przekłada się na:

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

Który, jeśli dobry w swoim rodzaju żonglerki oznacza, że rzeczy takie jak 0, '',FALSE ,NULL , i niezdefiniowane var będzie również to stwierdzenie prawdziwe.

Sugeruję, aby poprosić o wdrożenie tożsamości w Twig.

Kendall Hopkins
źródło
2
Kendall ma rację, sugerując, aby go wdrożyli - nie miałem nic poza dobrymi doświadczeniami z prośbą o wdrożenie rzeczy w śledzeniu problemów z githubem Twiga. Są bardzo przyjaźni i profesjonalni.
Shabbyrobe
@ kendall-hopkins Ciekawe, kiedy należy używać {if var is none}i jaki jest odpowiednik PHP?
noisebleed
@noisebleed {% if abcxyz is none %}staje się if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Zasadniczo więc, jeśli wartość jest niezdefiniowana lub ma wartość null, będzie to prawda.
Kendall Hopkins
1
@noisebleed Również nonejest aliasem dla null ref .
Kendall Hopkins
Odpowiednikiem tej odpowiedzi byłoby również użycie {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html, co przekłada się na PHP, if (empty($var))który ocenia na podstawie wartości falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Możesz użyj także {% if var is same as(var) %}do tożsamości ( ===). 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
źródło
Dlaczego uważasz, że ta odpowiedź jest lepsza niż obecnie akceptowana?
STT LCU,
Witamy w StackOverflow! Jaka jest różnica od już zaakceptowanej odpowiedzi? Czy to jest przestarzałe? Dlaczego twoja odpowiedź jest lepsza niż już istniejące?
Artemix,
@STTLCU On jest w tym if var is not null.
crmpicco
4

Możesz również użyć jednej linii, aby to zrobić:

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}
Xavit
źródło
3

możesz użyć następującego kodu, aby sprawdzić, czy

{% if var is defined %}

var is variable is SET

{% endif %}
MMHMasud
źródło
0

Również jeśli twoja zmienna jest tablicą , istnieje również kilka opcji:

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

LUB

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

Działa to tylko wtedy, gdy macie tablicę is definedANDNULL

Cagrison
źródło