Как использовать и регистрировать пути 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') }}