Как использовать и регистрировать пути Twig с пространством имён

Как использовать и регистрировать пути 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. Для начала, зарегистрируйте прострнаство имён для этого каталога:

  • YAML
  • XML
  • PHP
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 будет всегда загружать первый существующий шаблон, начиная с первого сконфигурированного пути. Эта функция может быть использована в качестве механизма отката для загрузки общих шаблонов при отсутствии специального шаблона.

  • YAML
  • XML
  • PHP
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') }}