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