Spec-Zone.ru › Twig 3

use

Примечание

Горизонтальное повторное использование — это расширенная функция 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 %}

Функция parent() автоматически определяет правильное дерево наследования, поэтому ее можно использовать при переопределении блока, определенного в импортированном шаблоне:

{% extends "base.html" %}

{% use "blocks.html" %}

{% block sidebar %}
{{ parent() }}
{% endblock %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

В этом примере parent() правильно вызовет блок sidebar из шаблона blocks.html.

Подсказка

Переименование позволяет эмулировать наследование, вызывая блок «родителя»:

{% extends "base.html" %}

{% use "blocks.html" with sidebar as parent_sidebar %}

{% block sidebar %}
{{ block('parent_sidebar') }}
{% endblock %}

Примечание

Вы можете использовать любое количество инструкций use в любом данном шаблоне. Если два импортированных шаблона определяют один и тот же блок, последний из них берет верх.

« set | verbatim »

© 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/3.x/tags/use.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API