如何在Twig中检查null?

时间:2010-07-16 12:38:34

标签: php twig short-circuiting

我应该使用什么构造来检查Twig模板中的值是否为NULL?

8 个答案:

答案 0 :(得分:489)

取决于您的具体需求:

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

答案 1 :(得分:120)

如何在树枝中设置默认值:http://twig.sensiolabs.org/doc/filters/default.html

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

或者,如果您不希望它在null时显示:

{{ my_var | default("") }}

答案 2 :(得分:33)

没有任何假设,答案是:

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

答案 3 :(得分:6)

我认为你不能。这是因为如果在树枝模板中未定义(未设置)变量,则它看起来像NULLnone(用树枝表示)。我很确定这是为了抑制模板中出现的错误访问错误。

由于Twig(===)缺乏“身份”,这是你能做的最好的事情

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

转换为:

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

如果您对type juggling表示擅长,则表示0''FALSENULL和未定义的var等内容也会使该陈述成立。

我的建议是要求在Twig中实现身份。

答案 4 :(得分:5)

     //test if varibale exist
     {% if var is defined %}
         //todo
     {% endif %}

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

答案 5 :(得分:3)

您可以使用以下代码检查是否

{% if var is defined %}

var is variable is SET

{% endif %}

答案 6 :(得分:2)

您也可以使用一行来执行此操作:

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

答案 7 :(得分:0)

另外,如果您的变量是 ARRAY ,则选项也很少:

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

OR

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

仅当您的数组is defined AND为NULL时才有效