Symfonyob娱乐下载 4.1新增功能:作为服务获取容器参数

马克西姆·科森的化身
这真是个好消息。欧宝平台是合法的吗@Ryan你完美地解释了为什么这个“反模式”实现(我不喜欢这个词)是一个很好的、人性化的解决方案。
艺术化身Hundiak
也许需要ParameterSubscriberInterface来补充当前由AbstractController使用的ServiceSubscriberInterface。

或者甚至允许ServiceLocater也定位参数。从来没有理解为什么你不能只是Container::get('some_parameter');我相信一定有原因。
马特·罗宾逊的化身
@leszek -根据我对文章的理解,你可以使用PSR-11兼容的(因此框架不可知?)ContainerBagInterface代替。好点了吗?
纪尧姆·路易埃的化身
希望这个特性只是一个“选项”,而不是必须的参数访问。

像很多人一样,我尝试编写“框架不可知”的代码,注入整个ParameterBag让我觉得我的服务依赖于整个容器。

但就像之前说的,这对需要它的人来说是一个很好的功能。
安德烈·赫里斯托夫的化身
我可以理解这一点,如果参数非常原始,以至于它们需要某种预处理,并且它们之间存在一些组合,那么为特定服务生成正确输入的逻辑可以外包给这样的服务。然后,在不同框架之间切换时,需要注意这些代码。否则,推包接口是一个不好的做法。类似于控制台命令,其中InputInterface是这样的东西(文档展示了如何将获取选项值和逻辑混合在一起)。欧宝官网下载app文档还提欧宝官网下载app供了一段代码,其中控制台命令在execute()方法中获取服务,而不是注入服务。它或多或少地使代码不可重用,并且不遵循端口和适配器(六边形)体系结构。
Petru Cojocar的化身
执行得好!

这不是一个完美的解决方案,因为你总是会陷入“服务定位器”的陷阱,但它绝对是一个优雅的解决方案,而不是必须注入这个:“@=service('kernel').getContainer().getParameterBag()”或其他类似的变通方法…
Petru Cojocar的化身
@Andrey Hristov我同意,我们目前在桌子上的东西并不完美,但不要陷入和我不久前一样的陷阱:期待一切都在一夜之间发生,看到“完美的交响乐”凭空出现。ob娱乐下载

我们必须认识到,核心贡献者正在不断努力改进通用架构并促进脱钩。
一如既往,我们都可以为symfony做出贡献,并将其推向正确的方向,请ob娱乐下载记住这一点!
菲利普·瓦哈拉的化身
不一定要这样做,但如果你只想得到你需要的参数,你可以这样做:

your_service_params:
组件类:“Symob娱乐下载fony \ \ DependencyInjection \ ParameterBag \ ParameterBag”
电话:
——[‘添加’,[{parameter_name:‘% kernel.project_dir %}]]

并注入@your_service_params。不过没有那么优雅!
托马斯·沃特鲁巴的化身
不错的工作!
吉姆斯皮特的化身
好了!
埃瓦尔德·范德维肯的化身
太棒了!
吉安卡洛斯·萨拉斯的化身
好工作
Soprun Vladislav的化身
好了!

评论截止。

为了确保评论保持相关性,旧帖子将被关闭。