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()
將會引發語法錯誤,就像被遺忘的%}
一樣。