0

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

当我检查 ChainLoader 中有哪些加载器时,它是

LoaderA -> LoaderB -> FilesystemLoader

,但我希望订单是

FilesystemLoader -> LoaderB -> LoaderA

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

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

4

1 回答 1

0

您可以通过手动标记服务来更改顺序,如果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 属性

于 2022-02-03T13:10:22.373 回答