Php 有没有一种方法可以从另一个小树枝编译的模板扩展它?

Php 有没有一种方法可以从另一个小树枝编译的模板扩展它?,php,templates,inheritance,compilation,twig,Php,Templates,Inheritance,Compilation,Twig,在TWIG编译的模板中进行了几次测试和检查之后,我得出结论,它可能没有实现,而TWIG的灵感来自于模板引擎(用python中的Jinja2进行了测试) 预期的行为如下所示: 主模板: {# 'list.twig' #} {% import _self as macro %} {% for e in results %} {{ macro.func(e) }} {% endfor %} {# 'product.list.twig' #} {% extends 'list.

在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 %}
扩展模板:

{# '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 %}
另一个扩展模板:

{# '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编译模板中有一个警告,用于调用
列表.twig
编译模板中的函数
func
。 而这一行
{%import\u self as macro%}
被编译成
$context[“macro”]=$this
,在此模板中使用
$this
是无用的,因为细枝继承只是在编译时重新创建完整模板,而没有PHP继承

实际上,在PHP中,所有3个编译的模板都从
Twig_Template
类继承,而完整的继承功能将从主列表编译模板继承两个扩展的编译列表模板

我是否在
extends/embed/include/use
TWIG功能中缺少了一些东西来重新创建此行为,或者在实际的TWIG版本中根本不可能


感谢您的帮助

使用此继承模式,您到底想要实现什么?正如您所注意到的,Twig for PHP不编译模板,因此底层编译的模板使用继承来实现
扩展/嵌入/包含/user
。除非您所做的不仅仅是呈现模板,否则TWIG如何实现底层编译并不重要?正如您所注意到的,Twig for PHP不编译模板,因此底层编译的模板使用继承来实现
扩展/嵌入/包含/user
。除非您所做的不仅仅是呈现模板,否则TWIG如何实现底层编译实际上并不重要。