parent()
不是一个函数,这是一个语言构造(就像在php中的isset()
)。
考虑下面的代码:
main.twig
{% extends 'parent.twig' %}
{% block body %}
{{ max(1, 2, 3) }}
{{ parent() }}
{% endblock %}
parent.twig
{% block body %}
{% endblock %}
如果你看一下编译模板,主体块会像这样编译:
// line 3
public function block_body($context, array $blocks = array())
{
// line 4
echo "
";
// line 5
echo twig_escape_filter($this->env, max(1, 2, 3), "html", null, true);
echo "
";
// line 7
$this->displayParentBlock("body", $context, $blocks);
echo "
";
}
如果你想看看full compiled template。
如您所见,Twig不会使用标准帮助程序调用此函数,因此parent()
不会通过沙箱过滤系统。
如果您需要parent()
是语言构造的另一个证明,只需在不在block()
中时调用它即可。你会得到一个Twig_Error_Syntax
例外,而不是Twig_Error_Runtime
之一。 Try it yourself in this fiddle。
因此要回答您的问题,禁用parent()
的唯一方法是禁用{% block %}
标记。因此,使用parent()
将会引发语法错误,就像被遗忘的%}
一样。