Symfonyob娱乐下载 4.1新增功能:自动装配改进
2018年3月27日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
允许将标量值绑定到控制器
当使用服务自动装配,_defaults.bind
选项允许按名称或类型绑定参数.例如,可以定义的值美元管理扫描
一旦在你的应用程序中,每个使用该名称的构造函数参数的服务将使用它的值:
1 2 3 4 5
#配置/ services.yaml服务:_defaults:绑定:美元管理扫描:“% kernel.project_dir %”
但是,如果某个控制器动作定义了美元管理扫描
参数,此配置不适用于它,参数不是自动连接的:
1 2 3 4 5 6 7
/ * * *@Route(“/做某事”)* /公共函数somethingAction($管理扫描){// $projectDir参数没有给定配置的值}
在控制器中,您需要使用$ this - > getParameter(“kernel.project_dir”)
快捷键或将值传递给控制器__construct ()
方法。这种行为并没有提供一致的体验(服务构造函数绑定与控制器动作绑定的行为不同),它是关于自动装配的最后一个粗糙的边缘。
这就是为什么在Symfonyob娱乐下载 4.1中你可以将标量值绑定到控制器参数.中像往常一样定义绑定_defaults.bind
然后将参数添加到控制器动作(不需要为它们定义构造函数方法)。
服务装修自动装配
装饰服务允许更改服务的行为,而不影响原始服务的其他使用。当装饰服务时,配置要求使用特殊的命名语法将装饰的服务作为参数传递:
1 2 3 4 5 6 7 8 9 10 11
#配置/ services.yaml服务:#这是您想要装饰的服务App \梅勒:~App \ DecoratingMailer:装饰:App \梅勒#您必须将原始服务作为参数传递,以及它的名称#是:"装饰服务ID" + ".inner"参数:(“@App \ DecoratingMailer.inner”)
虽然是显式的,但是这个配置看起来像一个内部的Symfony细节。ob娱乐下载这就是为什么在Symfonyob娱乐下载 4.1中,如果可能的话,内部服务是自动自动连接的。这是之前相同示例的新配置:
1 2 3 4 5 6
#配置/ services.yaml服务:App \梅勒:~App \ DecoratingMailer:装饰:App \梅勒
当满足以下条件时,完成装饰服务的自动配置:
- 装修服务是自动连接的;
- 装饰服务的构造函数只有一个被装饰服务类型的参数。
发表在#生活在边缘
评论
“我认为,这个体系将不良做法和不确定性传播到各地。”
我也一样:/
我也一样:/
嘿,伙计们!
我很欣赏关于控制器DI的评论:)。问题是,我们真的想让控制器成为“每个人”都可以使用的服务,这是一大步。这个技巧——如果课程完全是可选的——帮助了我们的努力。将控制器作为服务的问题(实际上,唯一的问题)是,对许多人来说——尤其是刚开始使用的时候——通过构造函数使用DI的需求是很麻烦的。动作注入有助于降低进入的障碍,同时仍然允许它们将控制器作为服务使用。
就像几乎所有的东西一样,这些类型的特性让我们降低了进入的门槛,但也希望给人们一个平稳的选择,以便稍后更新他们的代码,如果/当他们选择使用构造函数注入时。就我个人而言,我喜欢在任何地方使用动作注入。但是,这就是为什么Symfonyob娱乐下载是伟大的-你可以选择进入这个快捷方式或不,并成长出它,因为你了解更多的选择:)。
干杯!
我很欣赏关于控制器DI的评论:)。问题是,我们真的想让控制器成为“每个人”都可以使用的服务,这是一大步。这个技巧——如果课程完全是可选的——帮助了我们的努力。将控制器作为服务的问题(实际上,唯一的问题)是,对许多人来说——尤其是刚开始使用的时候——通过构造函数使用DI的需求是很麻烦的。动作注入有助于降低进入的障碍,同时仍然允许它们将控制器作为服务使用。
就像几乎所有的东西一样,这些类型的特性让我们降低了进入的门槛,但也希望给人们一个平稳的选择,以便稍后更新他们的代码,如果/当他们选择使用构造函数注入时。就我个人而言,我喜欢在任何地方使用动作注入。但是,这就是为什么Symfonyob娱乐下载是伟大的-你可以选择进入这个快捷方式或不,并成长出它,因为你了解更多的选择:)。
干杯!
Alex Rock is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now就像当你需要User时,如果你只有一个用户注册在“内存”提供程序中,它将每次都被链接,即使用户没有经过身份验证。
绑定可以覆盖路由参数(或相反),因为$request->属性中的所有内容都可以注入到控制器中。
我认为这一制度将不良做法和不确定性传播到各地。
依赖注入是关于依赖性的。路由动作与路由紧密耦合。因此,控制器构造函数必须与DI耦合。