Contributed by
Matt Brunt
in #24777.
Twig 支持 filters, functions, global variables 等的 overloading(译注:变量调节器/函数/全局变量,这都是twig模板中的标准功能,它们可以“过载”,即最迟加载)。这并非通常所需的功能,但它却在改变你程序中所使用的某些扩展的行为时有用。
过载那些元素时,需要把它们定义在一个新的 Twig extension 中,然后把这些扩展尽可能晚地注册,以便覆盖掉其他的扩展。当把 Twig 作为一个独立模板引擎来使用时(sf框架外使用),很容易控制“哪个扩展先被注册”。但是,在 Symfony 中,你并不需要控制这个顺序。
在 Symfony 4.1 中,若你要过载任何一个 Twig 元素,我们已经对“定义Twig扩展的优先级”进行了支持。这个优先级与框架其他部分的优先级用法是完全相同的: 优先级被定义为正或负的整数,存在于标签中
(本例中是 twig.extension
) 的 priority
属性中:
1 2 3 4 5 6 7 8 9 | # config/services.yaml
services:
# ...
App\Twig\AppExtension:
public: false
tags:
# extensions with higher priorities are registered earlier
# 愈高的优先级则愈早被注册
- { name: twig.extension, priority: -1024 } |
唯一要注意的是当你定义优先级时,不可以依赖于 service autoconfiguration(服务的自动注册)而且必须把 Twig extension 显式地注册为服务并指派其 priority
属性的值。