如何检查树枝为空?

我应该使用什么结构来检查一个值是否为NULL在树枝模板?

277164 次浏览

我认为你做不到。这是因为如果一个变量在树枝模板中未定义(未设置),它看起来像NULLnone(在树枝术语中)。我很确定这是为了防止在模板中发生糟糕的访问错误。

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

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

翻译过来就是:

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

如果你擅长你的类型的,这意味着诸如0''FALSENULL和一个未定义的变量也将使该声明为真。

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

具体取决于你需要什么:

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

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

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

或者如果你不希望它显示为空:

\{\{ my_var | default("") }}

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

{% if var is defined %}


var is variable is SET


{% endif %}

不做任何假设,答案是:

{% if var is null %}

但是,只有当var恰好是NULL,而不是任何其他计算为false的值(例如零、空字符串和空数组)时,这才成立。此外,如果没有定义var,则会导致错误。更安全的方法是:

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

可以缩写为:

{% if var|default is null %}

如果你没有为default过滤器提供参数,它假设NULL(类似于默认的default)。所以(我知道)检查变量是否为空(null, false,空字符串/数组等)的最短和最安全的方法:

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


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

你也可以用一行来做到这一点:

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

此外,如果你的变量是数组,也有几个选项:

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

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

这只适用于你的数组is defined AND为NULL