จะตรวจสอบ null ใน Twig ได้อย่างไร?


คำตอบ:


516

ขึ้นอยู่กับสิ่งที่คุณต้องการ:

  • is nullตรวจสอบว่าเป็นค่าnull:

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined ตรวจสอบว่ามีการกำหนดตัวแปร:

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

นอกจากนี้การis sameasทดสอบซึ่งทำการเปรียบเทียบแบบสองค่าอย่างเข้มงวดอาจเป็นที่สนใจสำหรับการตรวจสอบค่าอื่นที่ไม่ใช่null(เช่นfalse):

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

71
และเพื่อตรวจสอบว่าบางสิ่งไม่เป็นโมฆะเพียงทำ{% if var is not null %}
J.

4
ทราบอย่างรวดเร็วว่า: $ var == null จะกลับจริงด้วย $ var คือ 0 แต่ $ var เป็นโมฆะจะส่งคืนเท็จ
daSn0wie

โปรดทราบว่า $ var == 0 จะกลับมาเป็นจริงถ้า $ var เป็นโมฆะ
Petter Soderlund

นอกจากนี้ซึ่งแตกต่างจากisset()ฟังก์ชั่นPHP is definedจะกลับมาtrueถ้ามีการกำหนดตัวแปรและค่าเป็นโมฆะ
Pavel Petrov

1
หมายเหตุ: เนื่องจากการตรวจสอบ Twig 2.x สำหรับตัวแปรเท่ากับค่าเช่นis_ sameasต้อง{% if var is same as(false) %}ไม่{% if var is sameas(false) %}เห็น Doc url => twig.symfony.com/doc/2.x/tests/sameas.html
ahmed hamdy

127

วิธีตั้งค่าเริ่มต้นเป็น twig: http://twig.sensiolabs.org/doc/filters/default.html

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

หรือถ้าคุณไม่ต้องการให้มันแสดงเมื่อ null:

{{ my_var | default("") }}

1
ดังนั้นมันจึงแยกความแตกต่างระหว่างundefined or emptyและnull?
ปุย

6
ดูเหมือนว่านี่เป็นวิธีที่ถูกต้องในการตรวจสอบ ... น่าเสียดายที่ไม่มี upvotes มากมาย
mr-sk

1
สิ่งที่ฉันกำลังมองหา ต้องทำให้แน่ใจว่าคุณมี | เริ่มต้นซึ่งคุณสามารถลองเริ่มต้นตัวแปรอื่นเช่น: {{my_var | default (my_var2)}} ฉันเพิ่งทดสอบ แต่คุณยังสามารถเชื่อมต่อได้เช่น: {{my_var | ค่าเริ่มต้น (my_var2) | ค่าเริ่มต้น ("my_var และ my_var2 ไม่มีอยู่")}}
CTS_AE

34

ไม่มีสมมติฐานใด ๆ คำตอบคือ:

{% if var is null %}

แต่สิ่งนี้จะเป็นจริงเฉพาะในกรณีที่varเป็นจริงเท่านั้นNULLและไม่ใช่ค่าอื่นใดที่ประเมินเป็นfalse(เช่นศูนย์สตริงว่างและอาร์เรย์ว่าง) นอกจากนี้จะทำให้เกิดข้อผิดพลาดหากvarไม่ได้กำหนดไว้ วิธีที่ปลอดภัยกว่าคือ:

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

ซึ่งสามารถย่อให้เป็น:

{% if var|default is null %}

หากคุณไม่ได้ระบุอาร์กิวเมนต์ให้กับdefaultตัวกรองมันจะถือว่าNULL(เรียงลำดับเริ่มต้นเป็นค่าเริ่มต้น) ดังนั้นวิธีที่สั้นและปลอดภัยที่สุด (ฉันรู้) เพื่อตรวจสอบว่าตัวแปรว่างเปล่า (null, false, สตริงว่าง / อาร์เรย์ ฯลฯ ):

{% if var|default is empty %}

7

ฉันไม่คิดว่าคุณจะทำได้ นี่เป็นเพราะหากตัวแปรไม่ได้กำหนดไว้ (ไม่ได้ตั้งค่า) ในเทมเพลตทวิกดูเหมือนว่าNULLหรือnone(ในเทอมทวิก) ฉันค่อนข้างแน่ใจว่านี่คือการระงับข้อผิดพลาดการเข้าถึงที่ไม่ดีเกิดขึ้นในแม่แบบ

เนื่องจากการขาด "ตัวตน" ใน Twig ( ===) นี่เป็นวิธีที่ดีที่สุดที่คุณสามารถทำได้

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

ซึ่งแปลเป็น:

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

ซึ่งถ้าดีของคุณที่คุณประเภทเล่นกลหมายความว่าสิ่งต่างๆเช่น0, '', FALSE, NULLและ var ไม่ได้กำหนดก็จะทำให้คำสั่งที่แท้จริง

คำแนะนำของฉันคือการขอข้อมูลประจำตัวที่จะนำไปใช้กับทวิก


2
เคนดอลมีสิทธิ์ที่จะแนะนำว่าพวกเขาใช้มัน - ฉันไม่มีอะไรนอกจากประสบการณ์ที่ดีที่ขอสิ่งต่าง ๆ ที่จะนำไปใช้ในตัวติดตามปัญหา GitHub Twig พวกเขาเป็นมิตรและเป็นมืออาชีพมาก
Shabbyrobe

@ kendall-hopkins มีความอยากรู้อยากเห็นเมื่อใดควรใช้{if var is none}และอะไรที่เทียบเท่ากับ PHP
ส่งเสียงดัง

@noisebleed กลายเป็น{% if abcxyz is none %} if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }ดังนั้นโดยทั่วไปหากค่าไม่ได้กำหนดหรือเป็นโมฆะมันจะเป็นจริง
Kendall Hopkins

1
@noisebleed นอกจากนี้ยังnoneเป็นนามแฝงสำหรับโทษnull
Kendall Hopkins

เทียบเท่ากับคำตอบนี้ก็คือการใช้{% if var is empty %} twig.sensiolabs.org/doc/tests/empty.htmlซึ่งแปลเป็น PHP if (empty($var))ที่ประเมินค่า falsey ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/th/function.empty.phpคุณสามารถ ยังใช้{% if var is same as(var) %}เพื่อระบุตัวตน ( ===) 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 %}

ทำไมคุณคิดว่าคำตอบนี้ดีกว่าคำตอบที่ยอมรับในปัจจุบัน
STT LCU

ยินดีต้อนรับสู่ StackOverflow! อะไรคือข้อแตกต่างจากคำตอบที่ยอมรับแล้ว? มันล้าสมัยหรือไม่? ทำไมคำตอบของคุณดีกว่าคำตอบที่มีอยู่แล้ว?
Artemix

@STTLCU if var is not nullเขารวมทั้ง
crmpicco

4

คุณยังสามารถใช้หนึ่งบรรทัดเพื่อทำสิ่งนี้:

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

3

คุณสามารถใช้รหัสต่อไปนี้เพื่อตรวจสอบว่า

{% if var is defined %}

var is variable is SET

{% endif %}

0

นอกจากนี้หากตัวแปรของคุณคือARRAYก็มีตัวเลือกน้อยเช่นกัน:

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

หรือ

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

สิ่งนี้จะใช้งานได้ถ้าอาร์เรย์is definedAND ของคุณเป็นเท่านั้นNULL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.