После нескольких тестов и проверок в скомпилированных шаблонах TWIG я пришел к выводу, что он может быть не реализован, тогда как он находится в шаблонизаторе, из которого вдохновлен TWIG (протестирован с Jinja2 в python)
Ожидаемое поведение следующее:
Основной шаблон:
{# '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 скомпилированных шаблона наследуются в PHP от Twig_Template
класс, тогда как функция полного наследования унаследовала бы оба расширенных шаблона скомпилированного списка от скомпилированного шаблона основного списка.
Я что-то упустил в extends/embed/include/use
Функция TWIG для воссоздания такого поведения или это просто невозможно в реальной версии TWIG?
Спасибо за вашу помощь
Задача ещё не решена.
Других решений пока нет …