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

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

Сообщество Symfony гордится созданием и поддержанием высококачественных пакетов (см. KnpBundles.com) для большого количества различных функций. Как только вы используете сторонний пакет, вам скорее всего понадобится переопределить и настроить один или несколько его шаблонов.

Представьте, что вы установили воображаемый открытый источник информации AcmeBlogBundle в вашем проекте. И в то время, как вы всем очень довольны, вы всё равно хотите переопределить шаблон для страницы списка блога. Внутри пакета, шаблон, который вы хотите переопределить, находится в Resources/views/Blog/index.html.twig.

Чтобы переопределить шаблон пакета, просто скопируйте шаблон index.html.twig из пакета в app/Resources/AcmeBlogBundle/views/Blog/index.html.twig (каталог app/Resources/AcmeBlogBundle не будет существовать, так что вам понадобится создать его). Теперь вы свободно можете настраивать шаблон.

Caution

Если вы добавите шаблон в новую локацию, возможно вам понадобится очистить ваш кеш (php bin/console cache:clear), даже если вы в режиме отладки.

Эта же логика применима к любому шаблону, живущему в пакете: просто следуйте соглашению: app/Resources/{BUNDLE_NAME}/views/{PATH/TO/TEMPLATE.html.twig}.

Note

Вы также можете переопределять шаблоны из пакета, используя наследование пакетов. Чтобы узнать больше, см. Как использовать наследование пакетов для переопределения частей пакета.

Переопределение базовых шаблонов

Так как фреймворк Symfony сам по себе тоже всего лишь пакет, базовые шаблоны могут быть переопределены таким же образом. Например, базовый TwigBundle содержит несколько разных шаблонов "исключения" и "ошибки", которые могут быть переопределены путём копирования каждого из каталога Resources/views/Exception пакета TwigBundle, в каталог app/Resources/TwigBundle/views/Exception.