Bagaimana cara memeriksa null di Ranting?

279

Konstruk apa yang harus saya gunakan untuk memeriksa apakah suatu nilai NULL dalam templat Ranting?

Halus
sumber

Jawaban:

516

Tergantung pada apa yang Anda butuhkan:

  • is nullmemeriksa apakah nilainya null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined memeriksa apakah variabel didefinisikan:

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

Selain itu is sameastes, yang melakukan perbandingan ketat dua nilai, mungkin menarik untuk memeriksa nilai selain null(seperti false):

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
NikiC
sumber
71
Dan untuk memeriksa apakah ada sesuatu yang tidak nol, lakukan saja{% if var is not null %}
J.-BC
4
catat cepat bahwa: $ var == null akan mengembalikan true dengan $ var adalah 0, tetapi $ var adalah null akan mengembalikan false
daSn0wie
Perhatikan juga bahwa $ var == 0 akan mengembalikan true jika $ var adalah null
Petter Soderlund
Selain itu, tidak seperti isset()fungsi PHP , is definedakan kembali truejika variabel didefinisikan dan nilainya nol.
Pavel Petrov
1
Perhatikan: sebagai Ranting 2.x periksa untuk variabel sama dengan nilai seperti tidak is_ sameasboleh melihat Doc url => twig.symfony.com/doc/2.x/tests/sameas.html{% if var is same as(false) %}{% if var is sameas(false) %}
ahmed
127

Cara mengatur nilai default di ranting: http://twig.sensiolabs.org/doc/filters/default.html

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

Atau jika Anda tidak ingin ditampilkan ketika nol:

{{ my_var | default("") }}
lax4mike
sumber
1
Jadi, apakah itu membedakan antara undefined or emptydan null?
Lembut
6
Sepertinya ini adalah cara yang benar untuk memeriksa ... Malu itu tidak memiliki banyak upvotes.
mr-sk
1
Persis apa yang saya cari. Harus memastikan bahwa Anda memiliki | default yang kemudian dapat Anda coba default ke variabel lain seperti: {{my_var | default (my_var2)}} Saya baru saja menguji, tetapi Anda bahkan dapat terus berantai seperti: {{my_var | default (my_var2) | default ("my_var dan my_var2 tidak ada")}}
CTS_AE
34

Tanpa asumsi apapun jawabannya adalah:

{% if var is null %}

Tetapi ini hanya akan benar jika var tepat NULL, dan bukan nilai lain yang mengevaluasi false(seperti nol, string kosong dan array kosong). Selain itu, akan menyebabkan kesalahan jika vartidak didefinisikan. Cara yang lebih aman adalah:

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

yang dapat disingkat menjadi:

{% if var|default is null %}

Jika Anda tidak memberikan argumen ke defaultfilter, itu mengasumsikan NULL(semacam default default). Jadi cara terpendek dan teraman (saya tahu) untuk memeriksa apakah suatu variabel kosong (null, false, string / array kosong, dll):

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

Saya pikir kamu tidak bisa. Ini karena jika suatu variabel tidak terdefinisi (tidak disetel) dalam templat ranting, sepertinya NULLatau none(dalam istilah ranting). Saya cukup yakin ini untuk menekan kesalahan akses buruk dari yang terjadi di template.

Karena kurangnya "identitas" di Twig ( ===) ini adalah yang terbaik yang dapat Anda lakukan

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

Yang diterjemahkan menjadi:

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

Yang jika Anda baik di Anda tipe juggling , berarti bahwa hal-hal seperti 0, '', FALSE,NULL , dan var terdefinisi akan juga membuat pernyataan itu benar.

Saran saya adalah meminta identitas untuk diimplementasikan ke dalam Ranting.

Kendall Hopkins
sumber
2
Kendall benar untuk menyarankan agar mereka menerapkannya - Saya tidak punya pengalaman lain selain meminta hal-hal untuk diimplementasikan pada pelacak isu github Twig. Mereka sangat ramah dan profesional.
Shabbyrobe
@ kendall-hopkins Ingin tahu, kapan waktu yang tepat untuk digunakan {if var is none}dan apa itu setara PHP?
noisebleed
@noisebleed {% if abcxyz is none %}menjadi if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Jadi pada dasarnya jika nilainya tidak terdefinisi atau nol, itu akan benar.
Kendall Hopkins
1
@noisebleed Juga nonemerupakan alias untuk null ref .
Kendall Hopkins
Setara dengan jawaban ini juga akan menggunakan {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html yang diterjemahkan ke PHP if (empty($var))yang mengevaluasi terhadap nilai falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Anda dapat juga digunakan {% if var is same as(var) %}untuk identitas ( ===). 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 %}
terima kasih
sumber
Menurut Anda mengapa jawaban ini lebih baik daripada yang diterima saat ini?
STT LCU
Selamat datang di StackOverflow! Apa perbedaan dari jawaban yang sudah diterima? Apakah sudah usang? Mengapa jawaban Anda lebih baik daripada yang sudah ada?
Artemix
@ STTLCU Dia termasuk if var is not null.
crmpicco
4

Anda juga dapat menggunakan satu baris untuk melakukan itu:

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

Anda dapat menggunakan kode berikut untuk memeriksa apakah

{% if var is defined %}

var is variable is SET

{% endif %}
MMHMasud
sumber
0

Juga jika variabel Anda adalah ARRAY , ada beberapa opsi juga:

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

ATAU

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

Ini hanya akan berfungsi jika array is definedAND AndaNULL

Cagrison
sumber