2010-07-16 30 views

Trả lời

423

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

  • is null kiể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 các bài kiểm tra is sameas, mà hiện một kiểu so sánh khắt khe của hai giá trị, có thể quan tâm để kiểm tra giá trị khác hơn null (như false):

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

Đây là câu trả lời đúng cho twig –

+48

Và để kiểm tra xem có điều gì đó không phải là không, chỉ cần thực hiện '{% nếu var không phải là null%}' –

+4

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

5

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 khuôn mẫu, có vẻ như là NULL hoặc none (theo thuật ngữ thứ hai). Tôi khá chắc chắn đ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 một "bản sắc" trong Twig (===) này là tốt nhất bạn có thể làm

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

Những dịch để:

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

nào nếu bạn tốt ở type juggling của bạn , có nghĩa là những thứ như 0, '', FALSE, NULL và var không xác định cũng sẽ làm cho tuyên bố đó đúng.

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

+2

Kendall có quyền gợi ý rằng họ triển khai nó - Tôi không có gì ngoài trải nghiệm tốt khi yêu cầu những thứ được triển khai 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. – Shabbyrobe

+0

@ kendall-hopkins Rất tò mò, khi nào nó thích hợp để sử dụng '{if var is none}' và tương đương PHP là gì? – noisebleed

+0

@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ị là không xác định hoặc null, nó sẽ là đúng sự thật. –

108

Làm thế nào để thiết lập các giá trị mặc định trong cành lá: 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("") }} 
+0

Vì vậy, nó phân biệt giữa 'undefined hoặc empty' và' null'? – Fluffy

+6

Có vẻ như đây là cách chính xác để kiểm tra ... Xấu hổ nó không có nhiều upvotes. –

+1

Chính xác những gì tôi đang tìm kiếm. Phải đảm bảo rằng bạn có | mặc định mà sau đó bạn có thể thử đặt mặc định cho một biến khác như vậy: {{my_var | mặc định (my_var2)}} Tôi vừa 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")}} –

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 %} 
30

Nếu không có bất kỳ giả định câu trả lời là:

{% if var is null %} 

Nhưng điều này sẽ chỉ đúng nếu var là chính xác NULL, và không phải bất kỳ giá trị khác đánh giá thành false (chẳng hạn như số không, chuỗi rỗng và mảng trống). Bên cạnh đó, nó sẽ gây ra lỗi nếu var khô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ể được rút ngắn xuống còn:

{% if var|default is null %} 

Nếu bạn không cung cấp một cuộc tranh cãi với bộ lọc default, nó giả định NULL (loại mặc định mặc định). Vì vậy, con đường ngắn nhất và an toàn nhất (Tôi biết) để kiểm tra xem một biến là rỗng (null, sai sự thật, chuỗi rỗng/mảng, vv):

{% if var|default is empty %} 
4
 //test if varibale exist 
    {% if var is defined %} 
     //todo 
    {% endif %} 

    //test if variable is not null 
    {% if var is not null %} 
     //todo 
    {% endif %} 
+0

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

+0

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ì? Là 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 hiện có? – Artemix

+0

@STTLCU Anh ấy bao gồm 'nếu var không phải là null'. – crmpicco

0

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

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }} 
Các vấn đề liên quan