Spec-Zone.ru › Twig 2

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 в любом данном шаблоне. Если два импортированных шаблона определяют один и тот же блок, последним будет принят последний.

« spaceless | 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/2.x/tags/use.html

Spec-Zone.ru

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