如果没有提供参数,Twig 的 'default' 过滤器会做什么?
What does Twig's 'default' filter do if no argument is provided?
我理解 default
过滤器如果像这样使用会如何表现:items|default(posts)
但是,我偶然发现了一些使用它但没有传递 arg 的代码:
{% if ( posts|default ) %}
{% endif %}
有可能它实际上什么都没做,只是不完整或样板代码,但我想仔细检查一下。
不传递任何参数 default
过滤器将导致 twig
return 空字符串 (''
)。还值得一提的是,在 twig
中,如果您测试一个空字符串,它将导致 false
.
因此在这种情况下,如果未定义 post
变量、false 或空字符串,过滤器将 return 一个空字符串,如果 return 值 false
从而忽略代码块内的代码
{% set foo = bar|default %}
{{ foo == '' ? 'empty string' : 'not an empty string' }}
{% if '' %}
Do something
{% else %}
Don't do anything
{% endif %}
--------------------------------
{% set var1 = false %}
{% set var2 = {} %}
{% if var1 | default %}
Do sthing with var1
{% else %}
Don't do anything with var1
{% endif %}
{% if var2 | default %}
Do sthing with var2
{% else %}
Don't do anything with var2
{% endif %}
{% if var3 | default %}
Do sthing with var3
{% else %}
Don't do anything with var3
{% endif %}
我理解 default
过滤器如果像这样使用会如何表现:items|default(posts)
但是,我偶然发现了一些使用它但没有传递 arg 的代码:
{% if ( posts|default ) %}
{% endif %}
有可能它实际上什么都没做,只是不完整或样板代码,但我想仔细检查一下。
不传递任何参数 default
过滤器将导致 twig
return 空字符串 (''
)。还值得一提的是,在 twig
中,如果您测试一个空字符串,它将导致 false
.
因此在这种情况下,如果未定义 post
变量、false 或空字符串,过滤器将 return 一个空字符串,如果 return 值 false
从而忽略代码块内的代码
{% set foo = bar|default %}
{{ foo == '' ? 'empty string' : 'not an empty string' }}
{% if '' %}
Do something
{% else %}
Don't do anything
{% endif %}
--------------------------------
{% set var1 = false %}
{% set var2 = {} %}
{% if var1 | default %}
Do sthing with var1
{% else %}
Don't do anything with var1
{% endif %}
{% if var2 | default %}
Do sthing with var2
{% else %}
Don't do anything with var2
{% endif %}
{% if var3 | default %}
Do sthing with var3
{% else %}
Don't do anything with var3
{% endif %}