Изменить порядок загрузчика 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 .

Другие вопросы по тегам