我正在使用defaultTwig过滤器在我的宏中指定参数默认值:
{% 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
这是一个错误吗?这是(部分)过滤器描述:
如果值未定义或为空,则默认过滤器返回传递的默认值,否则返回变量的值.
false甚至没有提到布尔值的评估.我的临时解决方法是:
{% set dismissable = dismissable is not defined or dismissable is null ?
    true : dismissable %}
Mae*_*lyn 14
这不是一个bug.你引用的文档提到了它,虽然它远非显而易见:
如果值未定义或为空
我的重点.False是一个空值.
Twig_Node_Expression_Default在代码中创建Twig_Node_Expression_Conditional.最后,默认过滤器归结为以下php代码:
$passed_value ? $passed_value : $default_value
在您的情况下,传递的值为false,因此表达式返回默认值.
您应该继续使用您的解决方法.
小智 5
您可以像这样使用空合并运算符:??
{% set dismissable = dismissable ?? true %}
这应该可以解决您的问题,并且这是一个很好且干净的解决方案。:-)
编辑:它也解决了default(false)问题。
| 归档时间: | 
 | 
| 查看次数: | 3042 次 | 
| 最近记录: |