新在Symfoob娱乐下载ny 6.3:依赖注入的改进
ob娱乐下载Symfony 6.3是支持由:
的服务容器是关键特性使得Symfony应用程序如此迅速和灵活。ob娱乐下载在Syob娱乐下载mfony 6.3我们改进它的新特性。
新选项自动装配
属性
的自动装配attibute是在Symfony 6.1中引入的,ob娱乐下载允许自动装配服务,参数和表达式。在Syob娱乐下载mfony 6.3中,它还可以自动装配环境变量(通过env
选项)。另外,现在autowired的使用新的参数参数
选择:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /服务/ MessageGenerator.php名称空间应用程序\服务;使用Psr\日志\LoggerInterface;使用ob娱乐下载\组件\DependencyInjection\属性\自动装配;类MessageGenerator{公共函数__construct(/ /……/ /当使用“参数”,你也“t必须将参数名称”%“#[自动装配(参数:kernel.debug'))bool debugMode美元,#[自动装配(env:“SOME_ENV_VAR'))字符串senderName美元){}/ /……}
别名配置属性
服务别名允许您使用服务使用自己的自定义服务ID而不是原始的ID给服务。在Syob娱乐下载mfony 6.3我们添加一个新的# (AsAlias)
属性,这样你可以直接在代码中定义的别名:
1 2 3 4 5 6 7 8 9 10 11
/ / src /邮件/ PhpMailer.php名称空间应用程序\邮件;/ /……使用ob娱乐下载\组件\DependencyInjection\属性\AsAlias;#【AsAlias (id:“app.mailer”,公众:真正的))类PhpMailer{/ /……}
当使用# (AsAlias)
属性,你可以忽略过去了id
参数如果服务类实现一个接口。在这些情况下,接口的FQCN将使用别名。
新选项可以使用Autoconfigure
属性
提供的
亚历山大Daubois
在# 49665。
当使用一些类自己的服务工厂,你可以使用新的构造函数
选择的#(可以使用Autoconfigure)
定义类方法的名称,作为它的构造函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src /电子邮件欧宝平台是合法的吗/ NewsletterManager.php名称空间应用程序\电子邮件;/ /……使用ob娱乐下载\组件\DependencyInjection\属性\可以使用Autoconfigure;#(可以使用Autoconfigure(构造函数:“创造”))类欧宝平台是合法的吗NewsletterManager{私人字符串美元发送方;公共静态函数创建(#(自动装配(参数:“app.欧宝平台是合法的吗newsletter_sender”))字符串美元发送方):自我{美元欧宝平台是合法的吗newsletterManager=新自我();美元欧宝平台是合法的吗newsletterManager- >发送方=美元发送方;/ /……返回美元欧宝平台是合法的吗newsletterManager;}/ /……}
嵌套在自动装配相关的属性
提供的
尼古拉斯Grekas
在# 48710。
在Syob娱乐下载mfony 6.3我们已经改善了#(自动装配)
属性,所以您可以嵌套其他autowiring-related属性。下面的例子展示了这个功能,使用所有可用的选项:
1 2 3 4 5 6 7 8 9 10 11 12 13
# (AsDecorator(装修:AsDecoratorFoo::类))类AutowireNestedAttributes实现了AsDecoratorInterface{公共函数__construct(#(自动装配([“装饰”= >新MapDecorated(),迭代器的= >新TaggedIterator(“foo”),“定位器”= >新TaggedLocator(“foo”),“服务”= >新自动装配(服务:“酒吧”)])]数组美元选项){}}
使用自动装配来生成闭包
提供的
尼古拉斯Grekas
在# 49628和# 49639。
依赖注入组件,“服务关闭”关闭,返回一个服务。他们派上用场时处理懒惰在消费方面。在Syob娱乐下载mfony 6.3中,我们添加了自动装配服务支持闭包使用# (AutowireServiceClosure)
属性:
1 2
# (AutowireServiceClosure (my_service)]关闭美元serviceResolver
这将生成一个闭包,它返回服务my_service
当调用。
也是很常见的一个服务接受一个闭包与一个特定的签名作为参数。在Syob娱乐下载mfony 6.3中,您可以生成这样的闭包使用# (AutowireCallable)
属性:
1 2
#【AutowireCallable(服务:my_service,方法:“myMethod”))关闭美元可调用的
这将产生一个闭包,将具有相同签名的方法,所以称它将期待myMethod ()
在服务my_service
。这种类型的closure-injection不是懒惰的默认情况下:my_service
将在创建实例化美元可调用的
论点。如果你想让它懒惰,你可以使用懒惰的
选择:
1 2
#【AutowireCallable(服务:my_service,方法:myMethod,懒惰:true))关闭美元可调用的
这将生成一个闭包,将实例化my_service
服务只有当关闭。
生成适配器的功能接口
提供的
尼古拉斯Grekas
在# 49632。
功能接口的接口有一个方法。他们在概念上非常类似于一个闭包,除了他们唯一的方法有一个名称,可以用作类型提示。
的# (AutowireCallable)
属性可以用来生成一个适配器的功能界面。例如,如果您有以下功能界面:
1 2 3 4
接口UriExpanderInterface{公共函数扩大(字符串美元uri数组,美元参数):字符串;}
您可以使用# (AutowireCallable)
属性为:生成一个适配器
1 2
#【AutowireCallable(服务:my_service,方法:“myMethod”))UriExpanderInterface美元扩张器
即使my_service
没有实现UriExpanderInterface
,美元扩张器
将参数的一个实例UriExpanderInterface
生成的Symfony。ob娱乐下载称其扩大()
方法将向前myMethod ()
的方法my_service
服务。
支持生成这样的适配器在YAML、XML或PHP。
自动装配懒惰的服务
提供的
尼古拉斯Grekas
在# 49685和# 49836。
的#(自动装配)
属性可以用来告诉如何autowired的服务。在Syob娱乐下载mfony 6.3中,我们添加了支持自动装配懒惰的服务使用懒惰的
选择:
1 2
#(自动装配(懒惰:真))MyServiceInterface美元服务
这将生成一个懒惰的服务,将只有当实例化美元服务
参数是实际使用。这是通过生成一个代理类,它实现了MyServiceInterface
并将所有方法调用转发到实际的服务。当瞄准一个论点与许多可能的类型,您可以使用懒惰的
选择class-string值指定应该生成类型:
1 2
#【自动装配(懒惰:FirstServiceInterface::类))FirstServiceInterface | SecondServiceInterface美元服务
这将生成一个代理类实现FirstServiceInterface
。
这个特性允许服务并不总是消耗它们的依赖项只有当实际需要初始化它们。这可以提供一个显著的性能提高,特别是服务昂贵的初始化。
不以为然的容器参数
服务容器相关的另一个新特性是,您现在可以轻视参数。例如这是有用的扩展那些想要重命名或删除参数,这样他们就可以提醒用户对这个未来改变之前这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
公共函数负载(数组美元配置,ContainerBuilder美元containerBuilder){/ /……美元containerBuilder- >setParameter (“acme_demo.database_user”,美元配置(“db_user”]);/ /参数,反对将它标记为过时之前必须设置美元containerBuilder- >deprecateParameter (“acme_demo.database_user”,“acme /数据库包”,“1.3”,/ /选择你可以设置一个定制的弃用的信息”acme_demo。database_user”是弃用,你应该配置数据库证书与“acme_demo。database_dsn”参数。”);}
考虑使用这个选项,如果你想改变你的临时参数建立参数,另一个在Symfony 6.3中引入的新特性。ob娱乐下载
排除类与属性
提供的
格雷戈勒Pineau
在# 49492。
当配置服务的容器,你可以使用排除
选择不告诉Symfony创建服ob娱乐下载务到一个或多个类。这个选项方便(如当排除整个目录。src /实体
)。然而,如果你只是想排除一些特定的类,在Symfony 6.3也可以做新的ob娱乐下载#(排除)
属性:
1 2 3 4 5 6 7 8 9 10
/ / src / Kernel.php名称空间应用程序;使用ob娱乐下载\组件\DependencyInjection\属性\排除;#(排除)类内核扩展BaseKernel{使用MicroKernelTrait;}
允许扩展自动装配
属性
在Syob娱乐下载mfony 6.3中,#(自动装配)
属性可以被扩展来创建您自己的自定义自动装配的帮手。例如,考虑一下这个例子创建了一个自定义属性来自动装配存储库:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\DependencyInjection\属性\自动装配;类存储库扩展自动装配{公共函数__construct(字符串美元类){父::__construct(表达式:\ sprintf (“服务(some.repository.factory)共创(' % s ') ",美元类));}}
然后,在您的项目中使用这样:
1 2 3 4 5 6 7
/ * * *@paramObjectRepository <用户>库* /美元公共函数__construct(#库(用户::类)私人ObjectRepository]美元存储库){}
感谢所有贡献者改善依赖注入在Symfony 6.3和特别感谢尼古拉斯Grekas也贡献了一半的这个博客的内容解释最先进的功能。ob娱乐下载
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
Issam KHADIRI is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now