Làm thế nào để kiểm tra null trong Twig?


279

Tôi nên sử dụng cấu trúc nào để kiểm tra xem giá trị có phải là NULL trong mẫu Twig không?

Câu trả lời:


516

Tùy thuộc vào chính xác những gì bạn cần:

  • is nullkiểm tra xem giá trị là null:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined kiểm tra xem biến được định nghĩa:

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

Ngoài ra, is sameasthử nghiệm, loại so sánh nghiêm ngặt của hai giá trị, có thể được quan tâm để kiểm tra các giá trị khác null(như false):

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

71
Và để kiểm tra xem có thứ gì không phải không, chỉ cần làm{% if var is not null %}
J.-BC

4
lưu ý nhanh rằng: $ var == null sẽ trả về true với $ var là 0, nhưng $ var là null sẽ trả về false
daSn0wie

Cũng lưu ý rằng $ var == 0 sẽ trả về true nếu $ var là null
Petter Soderlund

Ngoài ra, không giống như isset()hàm PHP , is definedsẽ trả về truenếu một biến được xác định và giá trị của nó là null.
Pavel Petrov

1
Lưu ý: vì Twig 2.x kiểm tra biến bằng giá trị như is_ sameasphải {% if var is same as(false) %}không {% if var is sameas(false) %}thấy url url => twig.symfony.com/doc/2.x/tests/sameas.html
ahmed

127

Cách đặt giá trị mặc định trong twig: http://twig.sensiolabs.org/doc/filters/default.html

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

Hoặc nếu bạn không muốn nó hiển thị khi null:

{{ my_var | default("") }}

1
Vì vậy, nó phân biệt giữa undefined or emptynull?
Fluffy

6
Có vẻ như đây là cách chính xác để kiểm tra ... Thật xấu hổ vì nó không có nhiều upvote.
mr-sk

1
Chính xác những gì tôi đang tìm kiếm. Phải chắc chắn rằng bạn có | mặc định mà sau đó bạn có thể thử mặc định cho một biến khác như vậy: {{my_var | mặc định (my_var2)}} Tôi mới thử nghiệm, nhưng bạn thậm chí có thể tiếp tục chuỗi như vậy: {{my_var | mặc định (my_var2) | mặc định ("my_var và my_var2 không tồn tại")}}
CTS_AE

34

Không có bất kỳ giả định nào, câu trả lời là:

{% if var is null %}

Nhưng điều này sẽ chỉ đúng nếu varchính xác NULLvà không có giá trị nào khác được ước tính false(chẳng hạn như 0, chuỗi rỗng và mảng trống). Bên cạnh đó, nó sẽ gây ra lỗi nếu varkhông được xác định. Một cách an toàn hơn sẽ là:

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

có thể rút ngắn thành:

{% if var|default is null %}

Nếu bạn không cung cấp đối số cho defaultbộ lọc, nó sẽ giả sử NULL(loại mặc định mặc định). Vì vậy, cách ngắn nhất và an toàn nhất (tôi biết) để kiểm tra xem một biến có trống không (null, false, chuỗi / mảng trống, v.v.):

{% if var|default is empty %}

7

Tôi không nghĩ bạn có thể. Điều này là do nếu một biến không được xác định (không được đặt) trong mẫu twig, thì nó trông giống NULLhoặc none(theo thuật ngữ twig). Tôi khá chắc chắn rằng điều này là để ngăn chặn các lỗi truy cập xấu xảy ra trong mẫu.

Do thiếu "danh tính" trong Twig ( ===), đây là điều tốt nhất bạn có thể làm

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

Dịch ra:

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

Mà nếu tốt tại của bạn kiểu tung hứng , phương tiện mà những thứ như 0, '', FALSE,NULL , và một var không xác định cũng sẽ làm cho tuyên bố rằng sự thật.

Đề nghị của tôi là yêu cầu danh tính được triển khai thành Twig.


2
Kendall có quyền đề nghị họ thực hiện nó - Tôi không có gì ngoài những trải nghiệm tốt khi yêu cầu mọi thứ được thực hiện trên trình theo dõi vấn đề github của Twig. Họ rất thân thiện và chuyên nghiệp.
Shabbycoat

@ kendall-hopkins Bạn tò mò, khi nào thì phù hợp để sử dụng {if var is none}và tương đương với PHP là gì?
ồn ào

@noisebleed {% if abcxyz is none %}trở thành if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Vì vậy, về cơ bản nếu giá trị không xác định hoặc null, nó sẽ đúng.
Kendall Hopkins

1
@noisebleed Cũng nonelà một bí danh cho null ref .
Kendall Hopkins

Tương đương với câu trả lời này cũng sẽ được sử dụng {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html mà dịch để PHP if (empty($var))mà đánh giá lại chống lại một giá trị falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Bạn có thể cũng sử dụng {% if var is same as(var) %}cho danh tính ( ===). 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 %}

Tại sao bạn nghĩ câu trả lời này tốt hơn câu trả lời hiện đang được chấp nhận?
STT LCU

Chào mừng bạn đến với StackOverflow! Sự khác biệt từ câu trả lời đã được chấp nhận là gì? Nó đã lỗi thời? Tại sao câu trả lời của bạn tốt hơn câu trả lời đã có?
Artemix

@STTLCU Anh ấy bao gồm if var is not null.
crmpicco

4

Bạn cũng có thể sử dụng một dòng để làm điều đó:

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

3

bạn có thể sử dụng đoạn mã sau để kiểm tra xem

{% if var is defined %}

var is variable is SET

{% endif %}

0

Ngoài ra nếu biến của bạn là ARRAY , thì cũng có một vài lựa chọn:

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

HOẶC LÀ

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

Điều này sẽ chỉ hoạt động nếu mảng is definedVÀ của bạn làNULL

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.