Как автоматически внедрять переменные во все шаблоны

Дата обновления перевода 2022-01-30

Как автоматически внедрять переменные во все шаблоны

Twig позволяет автоматическое внедрение одной или более переменных во все шаблоны. Эти глобальные переменные определяются в опции twig.globals внутри главного файла конфигурации Twig:

  • YAML
  • XML
  • PHP
1
2
3
4
5
# config/packages/twig.yaml
twig:
    # ...
    globals:
        ga_tracking: 'UA-xxxxx-x'

Теперь, переменная ga_tracking доступна во всех шаблонах Twig, поэтому вы можете использовать ее без необходимости ее ясной передачи из контроллера или сервиса, отображающего шаблон:

1
<p>The google tracking code is: {{ ga_tracking }}</p>

Ссылание на сервисы

В дополнение к статическим значениям, глобальные переменные Twig также могут ссылаться на сервисы из сервис-контейнера. Основным недостатком является то, что эти сервисы не поддаются ленивой загрузке. Другими словами, как только загружается Twig, ваш сервис инстанциируется, даже если вы вообще не используете эту глобальную переменную.

Чтобы определить сервис в качестве глобальной переменной Twig, добавьте к строке ID сервиса префикс, начинающийся с символа @, что является обычным синтаксисом для ссылания на сервисы в параметрах контейнера:

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
# config/packages/twig.yaml
twig:
    # ...
    globals:
        # the value is the service's id
        uuid: '@App\Generator\UuidGenerator'

Теперь вы можете использовать переменную uuid в любом шаблоне Twig, чтобы получить доступ к сервису UuidGenerator:

1
UUID: {{ uuid.generate }}