302

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

4

8 回答 8

554

取决于你到底需要什么:

  • is null检查值是否为null

     {% if var is null %}
         {# do something #}
     {% endif %}
    
  • is defined检查变量是否已定义:

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

此外is sameas,对两个值进行类型严格比较的测试可能对检查除null(like false) 以外的值感兴趣:

{% if var is sameas(false) %}
    {# do something %}
{% endif %}
于 2010-12-23T16:12:29.853 回答
135

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

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

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

{{ my_var | default("") }}
于 2011-10-25T21:30:10.843 回答
38

没有任何假设,答案是:

{% if var is null %}

但这只有在varis exactly时才成立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 %}
于 2012-12-21T09:31:25.917 回答
9

我不认为你可以。这是因为如果一个变量在 twig 模板中未定义(未设置),它看起来像NULLnone(在 twig 术语中)。我很确定这是为了抑制模板中发生错误的访问错误。

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

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

翻译为:

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

如果您擅长类型杂耍,这意味着诸如0, '', FALSE,NULL和 undefined var 之类的东西也会使该陈述成立。

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

于 2010-07-16T13:56:16.610 回答
6

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

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}
于 2015-12-07T15:35:05.943 回答
5
     //test if varibale exist
     {% if var is defined %}
         //todo
     {% endif %}

     //test if variable is not null
     {% if var is not null %}
         //todo
     {% endif %}
于 2013-08-28T07:46:47.500 回答
3

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

{% if var is defined %}

var is variable is SET

{% endif %}
于 2012-06-13T21:45:36.450 回答
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

于 2020-01-15T11:13:49.183 回答