如何编写一个定制的树枝扩展

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何编写一个定制的树枝扩展

树枝的扩展允许创建自定义函数,过滤器和树枝模板中使用它们。编写自己的树枝扩展之前,检查是否你所需要的过滤器/函数已经实现:

创建扩展类

假设您希望创建一个新的过滤器价格格式数到钱:

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

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 5.3支持通过JoliCode