Como verificar se o null no Twig?

279

Que construção devo usar para verificar se um valor é NULL em um modelo Twig?

Fofo
fonte

Respostas:

516

Dependendo do que exatamente você precisa:

  • is nullverifica se o valor é null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined verifica se a variável está definida:

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

Além disso, o is sameasteste, que faz uma comparação estrita de dois valores, pode ser interessante para verificar valores diferentes de null(como false):

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
NikiC
fonte
71
E para verificar se algo não é nulo, basta fazer{% if var is not null %}
J.-BC
4
nota rápida que: $ var == null retornará verdadeiro com $ var é 0, mas $ var é nulo retornará false
daSn0wie
Observe também que $ var == 0 retornará true se $ var for nulo
Petter Soderlund
Além disso, diferentemente da isset()função PHP , is definedretornará truese uma variável for definida e seu valor for nulo.
Pavel Petrov
1
Aviso: como verificação 2.x Twig para a variável é igual ao valor de como is_ sameasdeve ser {% if var is same as(false) %}não {% if var is sameas(false) %}ver Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
Ahmed Hamdy
127

Como definir valores padrão no twig: http://twig.sensiolabs.org/doc/filters/default.html

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

Ou se você não deseja que seja exibido quando nulo:

{{ my_var | default("") }}
lax4mike
fonte
1
Então, diferencia entre undefined or emptye null?
Fluffy
6
Parece que esta é a maneira correta de verificar ... Pena que não tenha muitos votos positivos.
mr-sk
1
Exatamente o que eu estava procurando. Tinha que ter certeza de que você tem | padrão, que você pode tentar usar como padrão para outra variável como esta: {{my_var | default (my_var2)}} Acabei de testar, mas você ainda pode continuar encadeando da seguinte maneira: {{my_var | padrão (my_var2) | padrão ("my_var e my_var2 não existem")}}
CTS_AE
34

Sem nenhuma suposição, a resposta é:

{% if var is null %}

Mas isso será verdadeiro apenas se varfor exatamente NULL, e não qualquer outro valor que seja avaliado false(como zero, cadeia vazia e matriz vazia). Além disso, causará um erro se varnão estiver definido. Uma maneira mais segura seria:

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

que pode ser reduzido para:

{% if var|default is null %}

Se você não fornecer um argumento para o defaultfiltro, ele assumirá NULL(tipo de padrão padrão). Portanto, a maneira mais curta e segura (eu sei) de verificar se uma variável está vazia (nula, falsa, string / matriz vazia, etc):

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

Eu não acho que você pode. Isso ocorre porque, se uma variável é indefinida (não definida) no modelo de galho, ela se parece com ( NULLou noneem termos de galho). Tenho certeza de que isso é para suprimir erros de acesso incorreto no modelo.

Devido à falta de uma "identidade" no Twig ( ===), é o melhor que você pode fazer

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

Que se traduz em:

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

Que se o seu bom em seu tipo de malabarismo , significa que as coisas tais como 0, '', FALSE, NULL, e um var indefinido irá também fazer essa afirmação verdadeira.

Minha sugestão é pedir que a identidade seja implementada no Twig.

Kendall Hopkins
fonte
2
Kendall está certo ao sugerir que eles o implementem - eu não tive nada além de boas experiências pedindo que coisas sejam implementadas no rastreador de problemas do Twig no github. Eles são muito amigáveis ​​e profissionais.
Shabbyrobe
@ kendall-hopkins Ficou curioso, quando é apropriado usar {if var is none}e qual é o equivalente em PHP?
Noisebleed
@noisebleed {% if abcxyz is none %}torna-se if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Então, basicamente, se o valor for indefinido ou nulo, será verdade.
Kendall Hopkins
1
@noisebleed Também noneé um apelido para null ref .
Kendall Hopkins
O equivalente a essa resposta também seria usar {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html, que é traduzido para PHP if (empty($var))que é avaliado em relação a um valor falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Você pode também use {% if var is same as(var) %}para identity ( ===). 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
fonte
Por que você acha que essa resposta é melhor do que a atualmente aceita?
STT LCU
Bem-vindo ao StackOverflow! Qual é a diferença da resposta já aceita? Está desatualizado? Por que sua resposta é melhor do que as já existentes?
Artemix 28/08/2013
@STTLCU Ele está incluindo if var is not null.
crmpicco
4

Você também pode usar uma linha para fazer isso:

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

você pode usar o código a seguir para verificar se

{% if var is defined %}

var is variable is SET

{% endif %}
MMHMasud
fonte
0

Além disso, se sua variável for uma ARRAY , também existem poucas opções:

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

OU

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

Isso funcionará apenas se sua matriz is definedAND forNULL

Cagrison
fonte