symfony - Twig/Symfony 2 中 "default"过滤器和 bool 宏参数的错误?

标签 symfony twig

我正在使用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/

相关文章:

php - Twig 中的 "While"和 "repeat"循环

php - 如何在 silex 应用程序中使用 Symfony 2 验证组件显示 Symfony 2 表单错误?

Symfony2、奏鸣曲、用户包 : Send email when user is enable on update

symfony - 在 Symfony 5 中使用 composer 安装 EasyAdmin 的问题

php - 尽管至少需要一行,但未找到查询结果

php - Twig - 格式化日期

symfony - 如何使用 Webpack 和 Symfony 观看 twig 文件?

php - twig 模板引擎,使用静态函数或变量

caching - Symfony - Assets 缓存自动版本控制

Twig 中的 Symfony2 安全功能?如何查看用户的角色?