检测是否传递了twig宏参数或为null

时间:2017-03-25 17:16:46

标签: macros twig undefined

我需要知道何时定义一个twig宏的参数vs将null作为值传递。如果我使用"已定义"然后,这说明了两个条件,因为twig似乎将所有未定义的参数设置为null。

例如,这里有两个调用,第一个调用没有参数的宏,第二个调用参数的空值:

{% import 'macros.twig' as macros %}
{{ macros.method() }}
{{ macros.method(null) }}

这将是宏观定义:

{% macro method(value) %}
  {# condition to determine if value is undefined or null? #}
{% endmacro %}

1 个答案:

答案 0 :(得分:1)

为了仔细研究Twig对宏的定义做了什么我已经添加了编译源。正如你所说,twig将所有变量默认设置为null,因此测试变量是否传递给宏将很难

枝杈

{% macro vars(foo, bar, foobar) %}
{% endmacro %}

{% import _self as forms %}
{{ forms.vars(null, false) }}

已编译的来源

// line 1
public function macro_vars($__foo__ = null, $__bar__ = null, $__foobar__ = null, ...$__varargs__)
{
    $context = $this->env->mergeGlobals(array(
        "foo" => $__foo__,
        "bar" => $__bar__,
        "foobar" => $__foobar__,
        "varargs" => $__varargs__,
    ));

    $blocks = array();

    ob_start();
    try {

        return ('' === $tmp = ob_get_contents()) ? '' : new Twig_Markup($tmp, $this->env->getCharset());
    } finally {
        ob_end_clean();
    }
}