更改 Twig Loader 顺序

Change Twig Loader order

所以我在我的项目中为存储在数据库中的模板创建了一些树枝加载器。简单地让它们实现 LoaderInterface 已经自动将它们添加到默认 Twig\Loader\ChainLoader - 但是,我还没有找到配置顺序的方法。

当我检查 ChainLoader 中有哪些装载机时,它是

LoaderA -> LoaderB -> FilesystemLoader

,但我希望顺序是

FilesystemLoader -> LoaderB -> LoaderA

如果我在 services.yaml 中定义 twig.loader,它总是以无限递归结束,没有任何效果。如果我手动配置对 twig.loader.chain 的调用,我会得到正确的加载器顺序,然后是链式加载器 X,然后是“自动配置”顺序的加载器。 Chainloader X 与 ChainLoader Symfony 配置的相同,所以...如果找不到模板则无限递归。

那么我究竟该如何告诉 twig 哪些加载器以什么顺序加载?我需要为这个简单的需求创建一个 CompilerPass 吗?

您可以通过 tagging the services manually 更改顺序,当未指定 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 attributes