我需要知道何时定义一个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 %}
答案 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();
}
}