如何编写一个自定义树枝扩展

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何编写一个自定义树枝扩展

如果你需要创建自定义的Twig函数,过滤器,测试或更多,你将需要创建一个Twig扩展。你可以阅读更多树枝的扩展在Twig文档中。欧宝官网下载app

提示

在编写自己的Twig扩展之前,检查您需要的过滤器/函数是否已经在ob娱乐下载Symfony树枝扩展.同时查看官方树枝扩展,可按以下方式安装在你的应用程式内:

1
作曲家需要树枝/扩展

创建扩展类

假设您想要创建一个名为价格将数字格式化为货币:

1 2 3 4
{{产品。价格|price }}{#传入3个可选参数#}{{产品。价格|price(2, ',', '.') }}

创建一个可扩展的类AbstractExtension然后填入逻辑:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src /理解/ AppExtension.php名称空间应用程序嫩枝使用嫩枝扩展AbstractExtension使用嫩枝TwigFilterAppExtension扩展AbstractExtension公共函数getFilters()返回数组TwigFilter (“价格”数组“priceFilter”)));}公共函数priceFilter数量小数0decPoint“。”thousandsSep','价格= number_format (数量小数decPointthousandsSep);价格“美元”价格返回价格;}}

提示

除了自定义过滤器,您还可以添加自定义功能并注册全局变量

将扩展注册为服务

接下来,将类注册为服务并标记为twig.extension.如果你在用默认的服务。yaml的配置,你完蛋了!ob娱乐下载Symfony将自动了解您的新服务并添加标记。

你现在可以开始在任何Twig模板中使用你的过滤器。

创建惰性加载的树枝扩展

1.26

在Twig 1.26中引入了对惰性加载扩展的支持。

在Twig扩展类中包含自定义过滤器/函数的代码是创建扩展的最简单方法。然而,在呈现任何模板之前,Twig必须初始化所有扩展,即使模板没有使用扩展。

如果扩展没有定义依赖关系(也就是说,如果你没有在扩展中注入服务),性能不会受到影响。然而,如果扩展定义了大量复杂的依赖关系(例如那些建立数据库连接的依赖关系),性能损失可能是显著的。

这就是为什么Twig允许将扩展定义与其实现解耦的原因。与前面的示例相同,第一个更改是删除priceFilter ()中定义的PHP可调用对象getFilters ()

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /理解/ AppExtension.php名称空间应用程序嫩枝使用应用程序嫩枝AppRuntime使用嫩枝扩展AbstractExtension使用嫩枝TwigFilterAppExtension扩展AbstractExtension公共函数getFilters()返回数组//这个过滤器的逻辑现在在一个不同的类中实现TwigFilter (“价格”数组(AppRuntime::类,“priceFilter”)));}}

然后,创建新的AppRuntime类(这不是必需的,但这些类的后缀是运行时按照惯例),并包括前面的逻辑priceFilter ()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ / src /理解/ AppRuntime.php名称空间应用程序嫩枝使用嫩枝扩展RuntimeExtensionInterfaceAppRuntime实现了RuntimeExtensionInterface公共函数__construct()//这个简单的例子没有定义任何依赖项,但是在你自己的依赖项中//扩展,你需要使用这个构造函数注入服务公共函数priceFilter数量小数0decPoint“。”thousandsSep','价格= number_format (数量小数decPointthousandsSep);价格“美元”价格返回价格;}}

如果您使用默认设置services.yaml配置,这将已经工作!否则,创建服务对于这门课来说标记你的服务twig.runtime

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。