如何在Twig中检查null?


Answers:


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.-BC

4
快速注意:$ var == null将返回true,而$ var为0,但是$ var为null将返回false
daSn0wie 2013年

还要注意,如果$ var为空,则$ var == 0将返回true
Petter Soderlund 2014年

此外,与PHP isset()函数不同,如果定义了变量且其值为null ,is defined则将返回true
帕维尔·彼得罗夫

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

如何在树枝中设置默认值: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
似乎这是检查的正确方法。可惜它没有很多支持。
mr-sk

1
正是我想要的。必须确保您拥有| default,然后您可以尝试将其默认为另一个变量,例如:{{my_var | 我刚刚进行了测试,但您甚至可以像这样继续链接:{{my_var | 默认(my_var2)| default(“ my_var和my_var2不存在”)}}
CTS_AE 2013年

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

我认为你不能。这是因为如果在树枝模板中未定义(未设置)变量,则该变量看起来像NULLnone(用树枝术语而言)。我很确定这是为了防止模板中发生错误的访问错误。

由于Twig(===)中缺少“身份”,因此这是您可以做的最好的事情

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

转换为:

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

如果您擅长杂耍,这意味着诸如0''FALSENULL,未定义的变种也会作出这样的说法正确。

我的建议是要求将身份应用到Twig中。


2
肯德尔(Kendall)建议他们实施它是正确的-我只有丰富的经验,要求在Twig的github问题跟踪器上实施一些事情。他们非常友好和专业。
Shabbyrobe

@ kendall-hopkins很好奇,什么时候才适合使用{if var is none}?PHP等价的是什么?
2012年

@noisebleed {% if abcxyz is none %}变为if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }。因此,基本上,如果该值是undefined或null,则它将为true。
肯德尔·霍普金斯

1
@noisebleed也是refnone的别名。null
肯德尔·霍普金斯

等效于此答案的方法也可以使用{% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html,它会转换为if (empty($var))以假值(!isset, null, 0, array(), "", false, "0", 0.0)评估的PHP ()php.net/manual/en/function.empty.php您可以也{% if var is same as(var) %}用于标识(===)。twig.sensiolabs.org/doc/tests/sameas.html
fyrye 2015年

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 2013年

欢迎来到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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.