如何编写一个定制的树枝扩展
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何编写一个定制的树枝扩展
树枝的扩展允许创建自定义函数,过滤器和树枝模板中使用它们。编写自己的树枝扩展之前,检查是否你所需要的过滤器/函数已经实现:
- 的默认的树枝过滤器和功能;
- 的Symfony树枝过滤器和功能添加ob娱乐下载;
- 的官方树枝扩展相关字符串、HTML、减价、国际化等。
创建扩展类
假设您希望创建一个新的过滤器价格
格式数到钱:
1 2 3 4
{{产品。价格|price }}{#传入三个可选参数#}{{产品。价格|price(2, ',', '.') }}
创建一个类,扩展了AbstractExtension
并填入逻辑:
1 2 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;使用嫩枝\TwigFilter;类AppExtension扩展AbstractExtension{公共函数getFilters(){返回(新TwigFilter (“价格”,(美元这,“formatPrice”)));}公共函数formatPrice(美元数量,美元小数=0,美元decPoint=“。”,美元thousandsSep=”、“){美元价格= number_format (美元数量,美元小数,美元decPoint,美元thousandsSep);美元价格=“美元”。美元价格;返回美元价格;}}
如果你想创建一个函数,而不是一个过滤器,定义getFunctions ()
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /理解/ AppExtension.php名称空间应用程序\嫩枝;使用嫩枝\扩展\AbstractExtension;使用嫩枝\TwigFunction;类AppExtension扩展AbstractExtension{公共函数getFunctions(){返回(新TwigFunction (“区域”,(美元这,“calculateArea”)));}公共函数calculateArea(int美元宽度,int美元长度){返回美元宽度*美元长度;}}
提示
自定义过滤器和功能,你也可以注册全局变量。
注册一个扩展服务
接下来,注册您的类作为服务和标记twig.extension
。如果你使用默认的服务。yaml的配置,你做的!ob娱乐下载Symfony会自动知道你新服务并添加标签。
现在,您可以开始使用你的过滤器在任何树枝模板。可选地,执行这个命令来确认你的新过滤器已成功注册:
1 2 3 4 5
#显示所有树枝的信息美元php bin /控制台调试:树枝#只显示一个特定的信息过滤器美元php bin /控制台调试:树枝——过滤器=价格
创建延迟加载树枝扩展
1.35
支持在嫩枝1.35.0 2.4.4介绍了延迟加载扩展。
包括自定义过滤器/函数的代码分支扩展类的最简单的方法是创建扩展。然而,树枝必须初始化所有扩展呈现任何模板之前,即使不使用一个扩展的模板。
如果扩展不定义依赖项(即如果你不注入服务)性能不受影响。然而,如果扩展定义很多复杂的依赖关系(如数据库连接),可以显著的性能损失。
这就是为什么树枝可以分离扩展定义的实现。后与之前相同的例子,第一个变化将删除formatPrice ()
方法中定义的PHP可调用的扩展和更新getFilters ()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /理解/ AppExtension.php名称空间应用程序\嫩枝;使用应用程序\嫩枝\AppRuntime;使用嫩枝\扩展\AbstractExtension;使用嫩枝\TwigFilter;类AppExtension扩展AbstractExtension{公共函数getFilters(){返回(/ /这个过滤器的逻辑现在是在一个不同的类中实现新TwigFilter (“价格”,(AppRuntime::类,“formatPrice”)));}}
然后,创建新的AppRuntime
类(它不是必需的,但是这些类后缀为运行时
按照惯例),包括以前的逻辑formatPrice ()
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /理解/ AppRuntime.php名称空间应用程序\嫩枝;使用嫩枝\扩展\RuntimeExtensionInterface;类AppRuntime实现了RuntimeExtensionInterface{公共函数__construct(){/ /这个简单的例子不定义任何依赖,但在你自己的/ /扩展,您需要使用这个构造函数注入服务}公共函数formatPrice(美元数量,美元小数=0,美元decPoint=“。”,美元thousandsSep=”、“){美元价格= number_format (美元数量,美元小数,美元decPoint,美元thousandsSep);美元价格=“美元”。美元价格;返回美元价格;}}
如果您使用的是默认值services.yaml
配置,这将已经工作!否则,创建一个服务这个类和标记你的服务与twig.runtime
。