use
Новое в версии 1.1: Горизонтальное повторное использование было добавлено в Twig 1.1.
Примечание
Горизонтальное повторное использование — это расширенная функция Twig, которая в обычных шаблонах используется редко. Она в основном применяется в проектах, которым нужно сделать блоки шаблонов повторно используемыми без использования наследования.
Наследование шаблонов — одна из самых мощных функций Twig, но она ограничена единичным наследованием; шаблон может расширять только один другой шаблон. Это ограничение делает наследование шаблонов простым для понимания и лёгким для отладки:
{% extends "base.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
Горизонтальное повторное использование — это способ достижения той же цели, что и множественное наследование, но без связанной с ним сложности:
{% extends "base.html" %}
{% use "blocks.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
Инструкция use сообщает Twig о том, что необходимо импортировать блоки, определенные в blocks.html, в текущий шаблон (это похоже на макросы, но для блоков):
{# blocks.html #}
{% block sidebar %}{% endblock %}
В этом примере инструкция use импортирует блок sidebar в основной шаблон. Код в основном эквивалентен следующему (импортированные блоки не выводятся автоматически):
{% extends "base.html" %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
Примечание
Тег use импортирует шаблон только в том случае, если он не расширяет другой шаблон, не определяет макросы и если тело пустое. Но он может использовать другие шаблоны.
Примечание
Поскольку инструкции use разрешаются независимо от контекста, переданного шаблону, ссылка на шаблон не может быть выражением.
Основной шаблон также может переопределить любой импортированный блок. Если шаблон уже определяет блок sidebar, то определённый в blocks.html игнорируется. Чтобы избежать конфликтов имён, вы можете переименовать импортированные блоки:
{% extends "base.html" %}
{% use "blocks.html" with sidebar as base_sidebar, title as base_title %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
Новое в версии 1.3: Поддержка parent() была добавлена в Twig 1.3.
Функция parent() автоматически определяет правильное дерево наследования, поэтому её можно использовать при переопределении блока, определённого в импортированном шаблоне:
{% extends "base.html" %}
{% use "blocks.html" %}
{% block sidebar %}
{{ parent() }}
{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
В этом примере, parent() правильно вызовет блок sidebar из шаблона blocks.html.
Подсказка
В Twig 1.2 переименование позволяет имитировать наследование, вызывая блок «родитель»:
{% extends "base.html" %}
{% use "blocks.html" with sidebar as parent_sidebar %}
{% block sidebar %}
{{ block('parent_sidebar') }}
{% endblock %}
Примечание
Вы можете использовать любое количество инструкций use в любом данном шаблоне. Если два импортированных шаблона определяют один и тот же блок, то последний из них преобладает.
© 2009–2018 by the Twig Team
Licensed under the three clause BSD license.
The Twig logo is © 2010–2020 Symfony
https://twig.symfony.com/doc/1.x/tags/use.html