经过TWIG编译模板的多次测试和检查后,我得出的结论是它可能没有实现,而是在TWIG受到启发的模板引擎中(在python中使用Jinja2进行测试)
预期的行为如下:
主要模板:
{# 'list.twig' #}
{% import _self as macro %}
{% for e in results %}
{{ macro.func(e) }}
{% endfor %}
扩展模板:
{# 'product.list.twig' #}
{% extends 'list.twig' %}
{% macro func(e) %}
This is the product: {{ e.id }}
{% endmacro %}
另一个扩展模板:
{# 'user.list.twig' #}
{% extends 'list.twig' %}
{% macro func(e) %}
This is the user: {{ e.id }}
{% endmacro %}
这些模板已经过编译,但PHP编译模板中有一个警告,用于调用func
编译模板中的函数list.twig
。
虽然此行{% import _self as macro %}
已编译为$context["macro"] = $this;
,但在此模板中使用$this
是无用的,因为TWIG继承只是在编译时重新创建完整模板而没有PHP继承。
实际上,所有3个编译模板都是从Twig_Template
类继承PHP,而完全继承功能将继承主列表编译模板中的扩展编译列表模板。
我是否遗漏了extends/embed/include/use
TWIG功能中的某些内容来重新创建此行为,或者它在实际的TWIG版本中是不可能的?
感谢您的帮助