Come verificare la presenza di null in Twig?


Risposte:


516

A seconda di cosa esattamente hai bisogno:

  • is nullcontrolla se il valore è null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined controlla se la variabile è definita:

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

Inoltre, il is sameastest, che prevede un confronto rigoroso di tipo tra due valori, potrebbe essere interessante per la verifica di valori diversi da null(come false):

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

71
E per verificare se qualcosa non è nullo, semplicemente{% if var is not null %}
J.-BC,

4
nota veloce che: $ var == null restituirà true con $ var è 0, ma $ var è null restituirà false
daSn0wie

Si noti inoltre che $ var == 0 restituirà true se $ var è null
Petter Soderlund

Inoltre, a differenza della isset()funzione PHP , is definedritornerà truese viene definita una variabile e il suo valore è nullo.
Pavel Petrov,

1
Avviso: come Twig assegno 2.x per la variabile è pari al valore di come is_ sameasdeve essere {% if var is same as(false) %}non {% if var is sameas(false) %}vedere Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
Ahmed Hamdy

127

Come impostare i valori predefiniti nel ramoscello: http://twig.sensiolabs.org/doc/filters/default.html

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

O se non vuoi che venga visualizzato quando null:

{{ my_var | default("") }}

1
Quindi differenzia tra undefined or emptye null?
Fluffy,

6
Sembra che questo sia il modo corretto di verificare ... Peccato che non abbia molti voti.
Mr-sk,

1
Esattamente quello che stavo cercando. Dovevo assicurarti di avere | impostazione predefinita che puoi quindi provare a impostare su un'altra variabile in questo modo: {{my_var | default (my_var2)}} Ho appena provato, ma puoi anche continuare a fare la catena in questo modo: {{my_var | default (my_var2) | default ("my_var e my_var2 non esistono")}}
CTS_AE

34

Senza ipotesi la risposta è:

{% if var is null %}

Ma questo sarà vero solo se lo varè esattamente NULLe non qualsiasi altro valore valutato false(come zero, stringa vuota e matrice vuota). Inoltre, causerà un errore se varnon è definito. Un modo più sicuro sarebbe:

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

che può essere abbreviato in:

{% if var|default is null %}

Se non si fornisce un argomento al defaultfiltro, presuppone NULL(una sorta di default predefinito). Quindi il modo più breve e sicuro (lo so) per verificare se una variabile è vuota (null, false, stringa / array vuota, ecc.):

{% if var|default is empty %}

7

Non penso che tu possa. Questo perché se una variabile non è definita (non impostata) nel modello di ramoscello, appare come NULLo none(in termini di ramoscello). Sono abbastanza sicuro che questo serve a sopprimere gli errori di accesso non validi nel modello.

A causa della mancanza di una "identità" in Twig ( ===) questo è il meglio che puoi fare

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

Che si traduce in:

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

Il che, se il vostro bene al vostro tipo di giocoleria , significa che le cose, come 0, '', FALSE, NULL, e una var indefinita farà anche questa affermazione vera.

Il mio suggerimento è di chiedere l'identità da implementare in Twig.


2
Kendall ha ragione a suggerire che lo implementano - non ho avuto altro che buone esperienze che mi chiedevano di implementare cose sul tracker dei problemi github di Twig. Sono molto amichevoli e professionali.
Shabbyrobe,

@ kendall-hopkins Sei curioso, quando è appropriato usare {if var is none}e qual è l'equivalente in PHP?
Rumorosamente il

@noisebleed {% if abcxyz is none %}diventa if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Quindi sostanzialmente se il valore è indefinito o nullo, sarà vero.
Kendall Hopkins,

1
@noisebleed Inoltre noneè un alias per null ref .
Kendall Hopkins,

L'equivalente di questa risposta sarebbe anche usare {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html che si traduce in PHP if (empty($var))che valuta un valore di falso ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Puoi utilizzare anche {% if var is same as(var) %}per 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 %}

Perché pensi che questa risposta sia migliore di quella attualmente accettata?
STT LCU,

Benvenuto in StackOverflow! Qual è la differenza dalla risposta già accettata? È obsoleto? Perché la tua risposta è migliore di quelle già esistenti?
Artemix,

@STTLCU Sta includendo if var is not null.
crmpicco,

4

Puoi anche usare una riga per farlo:

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

3

puoi usare il seguente codice per verificare se

{% if var is defined %}

var is variable is SET

{% endif %}

0

Inoltre, se la tua variabile è un ARRAY , ci sono anche alcune opzioni:

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

O

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

Funzionerà solo se l'array is definedAND lo èNULL

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.