Wie kann man in Twig auf Null prüfen?

279

Welches Konstrukt sollte ich verwenden, um zu überprüfen, ob ein Wert in einer Twig-Vorlage NULL ist?

Flauschige
quelle

Antworten:

516

Je nachdem, was genau Sie brauchen:

  • is nullprüft, ob der Wert ist null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined prüft, ob die Variable definiert ist:

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

Zusätzlich könnte der is sameasTest, bei dem zwei Werte typenvergleich verglichen werden, von Interesse sein, um andere Werte als null(wie false) zu überprüfen :

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
NikiC
quelle
71
Und um zu überprüfen, ob etwas nicht null ist, tun Sie einfach{% if var is not null %}
J.-BC
4
kurze Anmerkung, dass: $ var == null wird true zurückgeben, wobei $ var 0 ist, aber $ var ist null, wird false zurückgeben
daSn0wie
Beachten Sie auch, dass $ var == 0 true
zurückgibt,
Darüber hinaus, im Gegensatz zu der PHP - isset()Funktion, is definedwird zurückkehren , truewenn eine Variable definiert ist und der Wert ist null.
Pavel Petrov
1
Hinweis: Da Twig 2.x Prüfung auf Variable gleich Wert ist, is_ sameasmuss {% if var is same as(false) %}nicht {% if var is sameas(false) %}gesehen werden Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
ahmed hamdy
127

So legen Sie Standardwerte in twig fest: http://twig.sensiolabs.org/doc/filters/default.html

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

Oder wenn Sie nicht möchten, dass es angezeigt wird, wenn null:

{{ my_var | default("") }}
lax4mike
quelle
1
Unterscheidet es also zwischen undefined or emptyund null?
Fluffy
6
Scheint so, als wäre dies der richtige Weg, um zu überprüfen ... Schade, dass es nicht viele positive Stimmen gibt.
Herr-Sk
1
Genau das, wonach ich gesucht habe. Musste sicherstellen, dass Sie | haben Standard, den Sie dann versuchen können, standardmäßig eine andere Variable wie die folgende zu verwenden: {{my_var | default (my_var2)}} Ich habe gerade getestet, aber Sie können sogar so weiter verketten: {{my_var | Standard (my_var2) | Standard ("my_var und my_var2 existieren nicht")}}
CTS_AE
34

Ohne Annahmen lautet die Antwort:

{% if var is null %}

Dies gilt jedoch nur, wenn dies vargenau der Fall ist NULLund kein anderer Wert, der ausgewertet wird false(z. B. Null, leere Zeichenfolge und leeres Array). Außerdem wird es einen Fehler verursachen, wenn vares nicht definiert ist. Ein sicherer Weg wäre:

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

was verkürzt werden kann zu:

{% if var|default is null %}

Wenn Sie dem defaultFilter kein Argument geben , wird davon ausgegangen NULL(eine Art Standardstandard). Der kürzeste und sicherste Weg (ich weiß), um zu überprüfen, ob eine Variable leer ist (null, false, leerer String / Array usw.):

{% if var|default is empty %}
Jamol
quelle
7

Ich glaube nicht, dass du kannst. Dies liegt daran, dass eine Variable, die in der Zweigvorlage nicht definiert (nicht festgelegt) ist, wie NULLoder none(in Zweigbegriffen) aussieht . Ich bin mir ziemlich sicher, dass dies dazu dient, das Auftreten fehlerhafter Zugriffsfehler in der Vorlage zu unterdrücken.

Aufgrund des Fehlens einer "Identität" in Twig ( ===) ist dies das Beste, was Sie tun können

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

Was bedeutet:

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

Was , wenn Ihr gut an Ihrer Art Jonglieren , bedeutet , dass Dinge wie 0, '', FALSE, NULL, und eine undefinierte var auch diese Aussage wahr machen wird.

Mein Vorschlag ist, nach der Implementierung der Identität in Twig zu fragen.

Kendall Hopkins
quelle
2
Kendall schlägt zu Recht vor, dass sie es implementieren - ich habe nur gute Erfahrungen mit der Frage gemacht, ob Dinge auf Twigs Github Issue Tracker implementiert werden sollen. Sie sind sehr freundlich und professionell.
Shabbyrobe
@ kendall-hopkins Neugierig geworden, wann ist es angebracht zu verwenden {if var is none}und was ist das PHP-Äquivalent?
Noisebleed
@noisebleed {% if abcxyz is none %}wird if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Wenn der Wert also undefiniert oder null ist, ist er wahr.
Kendall Hopkins
1
@noisebleed Auch noneist ein Alias ​​für null ref .
Kendall Hopkins
Das Äquivalent zu dieser Antwort wäre auch die Verwendung von {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html, was in PHP übersetzt wird, if (empty($var))das anhand eines Falsey-Werts ( !isset, null, 0, array(), "", false, "0", 0.0) ausgewertet wird. Php.net/manual/en/function.empty.php Sie können auch {% if var is same as(var) %}für identity ( ===) verwenden. 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
quelle
Warum ist diese Antwort Ihrer Meinung nach besser als die derzeit akzeptierte?
STT LCU
Willkommen bei StackOverflow! Was ist der Unterschied zur bereits akzeptierten Antwort? Ist es veraltet? Warum ist Ihre Antwort besser als die bereits vorhandenen?
Artemix
@STTLCU Er schließt ein if var is not null.
Crmpicco
4

Sie können dazu auch eine Zeile verwenden:

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}
xavit
quelle
3

Mit dem folgenden Code können Sie überprüfen, ob

{% if var is defined %}

var is variable is SET

{% endif %}
MMHMasud
quelle
0

Auch wenn Ihre Variable ein ARRAY ist , gibt es auch einige Optionen:

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

ODER

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

Dies funktioniert nur, wenn Ihr Array is definedAND istNULL

Cagrison
quelle