我正在使用default
Twig 过滤器在我的 macro 中指定参数默认值:
{% macro base(type, title, content, separator, dismissable) %}
{% spaceless %}
{% debug dismissable %}
{% set separator = separator|default('!') %}
{% set dismissable = dismissable|default(true) %}
{% debug dismissable %}
{# Beginning outputting... #}
{% endspaceless %}
{% endmacro %}
问题是dismissable
参数类型应该是boolean
。但是,当传递 false
时,过滤器会对其进行评估并分配一个 true
默认值。 示例输出:
{{ base('success', 'Title', 'Hello', '!', false) }}
boolean false
boolean true
这是一个错误吗?以下是过滤器描述(部分):
The default filter returns the passed default value if the value is undefined or empty, otherwise the value of the variable.
甚至没有提到 bool 值false
的评估。我的临时解决方法是:
{% set dismissable = dismissable is not defined or dismissable is null ?
true : dismissable %}
最佳答案
这不是一个错误。您引用的文档提到了这一点,尽管它远非显而易见:
if the value is undefined or empty
我强调的。 False 是空值。
Twig_Node_Expression_Default创建 Twig_Node_Expression_Conditional在代码中。最后,默认过滤器归结为以下 php 代码:
$passed_value ? $passed_value : $default_value
在您的情况下,传递的值为 false,因此表达式返回默认值。
您应该继续使用您的解决方法。
关于symfony - Twig/Symfony 2 中 "default"过滤器和 bool 宏参数的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791068/