Изменить порядок загрузчика Twig
Поэтому я создал несколько загрузчиков веток в своем проекте для шаблонов, хранящихся в базах данных. Простое внедрение LoaderInterface уже автоматически добавляет их в Twig\Loader\ChainLoader по умолчанию, однако я не нашел способа настроить порядок.
Когда я проверяю, какие загрузчики находятся в ChainLoader, это
LoaderA -> LoaderB -> FilesystemLoader
, но я хочу, чтобы порядок был
FilesystemLoader -> LoaderB -> LoaderA
Если я определяю twig.loader в своих services.yaml, это всегда заканчивается бесконечной рекурсией, и ничего не работает. Если я вручную настрою вызовы twig.loader.chain, я получу правильный порядок загрузчиков, за которым следует загрузчик цепочки X, за которым следуют загрузчики в «автоматически настроенном» порядке. Chainloader X такой же, как и сам ChainLoader, который настраивает Symfony, так что... бесконечная рекурсия, если шаблон не найден.
Так как же мне сказать twig, какие загрузчики и в каком порядке загружать? Нужно ли мне создавать CompilerPass только для этого простого требования?
1 ответ
Вы можете изменить порядок, пометив сервисы вручную , когда
priority
не указано, по умолчанию
0
:
# services.yaml
App\Twig\LoaderA:
tags:
- { name: 'twig.loader', priority: 2 }
App\Twig\LoaderB:
tags:
- { name: 'twig.loader', priority: 1 }
Если вы предпочитаете, начиная с Symfony 5.3 (работающего под PHP 8), вы можете вместо этого использовать атрибуты PHP .