Як використовувати та реєструвати шляхи Twig з простором імен

Дата оновлення перекладу 2023-06-15

Як використовувати та реєструвати шляхи Twig з простором імен

Зазвичай, коли ви посилаєтеся на шаблон, ви використовуєте формат MyBundle:Subdir:filename.html.twig. (дивіться Локації іменування шаблонів ).

Twig також пропонує функцію під назвою "шляхи з простором імен", і їхня підтримка автоматично вбудована для всіх ваших пакетів.

Візьміть такі шляхи як приклад:

1
2
{% extends "AppBundle::layout.html.twig" %}
{{ include('AppBundle:Foo:bar.html.twig') }}

Зі шяхами з просторами імен, наступний код також працюватиме:

1
2
{% extends "@App/layout.html.twig" %}
{{ include('@App/Foo/bar.html.twig') }}

Обидва шляхи валідні та функціонують в Symfony за замовчуванням.

Tip

В якості додаткового бонусу: синтаксис прростору імен швидше.

Реєстрація ваших власних просторів імен

Ви також можете зареєструвати ваші власні користувацькі простори імен. Уявіть, що ви використовуєте деяку сторонню бібліотеку, яка містить шаблони Twig, що знаходяться в vendor/acme/foo-bar/templates. Для початку, зареєструйте простір імен для цього каталогу:

1
2
3
4
5
# app/config/config.yml
twig:
    # ...
    paths:
        '%kernel.project_dir%/vendor/acme/foo-bar/templates': foo_bar

Зареєстрований простір імен називається foo_bar і посилається на каталог vendor/acme/foo-bar/templates. Якщо припустити, що в цьому каталозі є файл під назвою sidebar.twig, ви можете з легкістю його використовувати:

1
{{ include('@foo_bar/sidebar.twig') }}

Багато шляхів для одного простору імен

Ви також можете призначити кілька шляхів одному й тому самому простору імен шаблону. Порядок, у якому конфігуруються шляхи, дуже важливий, оскільки Twig завжди завантажуватиме перший наявний шаблон, починаючи з першого сконфігурованого шляху. Ця функція може бути використана як резервний механізм для завантаження загальних шаблонів за відсутності спеціального шаблону.

1
2
3
4
5
6
7
# app/config/config.yml
twig:
    # ...
    paths:
        '%kernel.project_dir%/vendor/acme/themes/theme1': theme
        '%kernel.project_dir%/vendor/acme/themes/theme2': theme
        '%kernel.project_dir%/vendor/acme/themes/common': theme

Тепер ви можете використовувати один простір імен @theme, щоб посилатися на будь-який шаблон, що знаходиться в трьох попередніх каталогах:

1
{{ include('@theme/header.twig') }}