新在Symfoob娱乐下载ny 4.3:索引和标记服务集合
2019年2月28日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
ob娱乐下载Symfony提供了捷径注入所有服务标记与一个特定的标签,这是一种常见的需要在某些应用程序中,所以你不必编写编译器通过。在Syob娱乐下载mfony 4.3我们改善这个允许访问服务通过自己定义的索引标记。
在接下来的例子中,服务标记app.handler
定义一个额外的属性关键
。当注射到App \ HandlerCollection
服务,您现在可以定义一个属性index_by
告诉Symfonob娱乐下载y的指数,应该使用关联数组包含标记服务:
1 2 3 4 5 6 7 8 9 10 11 12 13
#配置/ services.yaml服务:应用\ \处理程序:标签:- - - - - -{名称:“app.handler”,关键:“handler_one”}App \处理器\二:标签:- - - - - -{名称:“app.handler”,关键:“handler_two”}App \ HandlerCollection:#注入所有服务标记app.handler作为第一个参数#和使用“关键”标签属性的值索引服务参数:[!标记{标签:“app.handler”,index_by:“关键”})
编译服务容器后,HandlerCollection
服务可以迭代处理程序使用中定义的值关键
属性:
1 2 3 4 5 6 7 8 9 10 11 12
/ / src /处理/ HandlerCollection.php名称空间应用程序\处理程序;类HandlerCollection{公共函数__construct(iterable美元处理程序){美元处理程序= iterator_to_array (美元处理程序);美元handlerTwo=美元处理程序(“handler_two”];/ /……}}
而不是定义索引值在每个服务标签,您可以定义这个值在一个静态方法调用getDefaultIndexName ()
在你的服务。例如,这就是前面应用\ \处理程序
服务会:
1 2 3 4 5 6 7 8 9 10 11 12
/ / src /处理/ One.php名称空间应用程序\处理程序;类一个{/ /……公共静态函数getDefaultIndexName():字符串{返回“handler_one”;}}
这个静态方法的名字也是可配置的通过default_index_method
标签属性:
1 2 3 4 5 6
#配置/ services.yaml服务:#……App \ HandlerCollection:参数:[!标记{标签:“app.handler”,default_index_method:“someCustomMethodName”})
发表在#生活在边缘
评论
Jachym Toušek
2月28日表示,2019年在13:29
# 1
不幸的是,这是没什么用的。这样的服务的集合需要懒惰,因为大多数时候你只需要其中的一些,其他初始化是无用的开销。而不是一个iterable HandlerCollection应该接收一个闭包,将返回与给定键相关的服务。
克利斯朵夫Coevoet
2月28日表示,2019年在42
# 2
@Jachym为需要访问的情况下,键(而不是使用迭代期间的关键),你可能想要的是使用service_locator系统(它不注入一个闭包,但PSR-11 ContainerInterface与获取和实现方法)。但好消息是,这个新特性将很快欧宝平台是合法的吗service_location内可用的配置来配置容易的东西:https://github.com/symfony/symfony/pull/30348ob娱乐下载
约瑟夫Kufner
2月28日表示,2019年在14:14
# 3
难道一个类实现的接口,所以我们知道getDefaultIndexName()方法是我们所期待的,不只是一个意想不到的name-alike方法?
奥斯卡·斯塔克
2月28日表示,2019年在记上17:52
# 4
约瑟夫·你是对这个应该做但不是硬要求
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。