【发布时间】:2018-10-03 23:03:38
【问题描述】:
我创建了一个捆绑包,我想使用它的最佳实践。
所以我所有的服务都是私有的
https://symfony.com/doc/current/service_container/alias_private.html
因此,除非您特别需要直接从 容器通过 $container->get(),最好的做法是让你的 服务私人。其实默认services.yaml配置 默认情况下将所有服务配置为私有。
和
https://symfony.com/blog/new-in-symfony-3-4-services-are-private-by-default
在 Symfony 核心中,我们已经做到了,我们制作了所有服务和 别名私有,除了少数选定的,需要在 引导时间。事实上,自举是最后也是唯一合法的 直接使用容器的用例。
那么,我们应该否决注入 service_container 完全与 ContainerAware* 一起使用?那是一个 社区在准备 Symfony 时可能会考虑的可能性 5.
我有一个必须由 App/Controller 使用的 Trait 或 Abstract 控制器。该特征可以通过自动装配调用私人服务,并且问题已修复但 Symfony 的最佳实践是不要只在 Bundle 中使用自动装配:
https://symfony.com/doc/current/service_container/autowiring.html
公共和可重复使用的捆绑包¶
Public bundles 应该明确地配置他们的服务,而不是依赖 关于自动装配。
那么如何在我的 Trait 或抽象控制器中注入我的私人服务。甚至在无需用户配置的 App 控制器中都是 services.yml。
我希望我很清楚。
对不起我的英语。我尝试改进它;-)
【问题讨论】:
-
你找到答案了吗?如果没有,我可以用代码解释一下,可能会更清楚。
-
@TomášVotruba 我使用Api平台的解决方案,每个动作都是一个服务。但是如果用户想要创建一个控制器,他可以使用一个制造者控制器,该控制器在一个特征中使用不同的服务操作。我不明白,Symfony 在第三方包中说“不要使用控制器”或“不要使用容器”,但 easyadmin 包使用它。
-
Action as service 是 IMO 的最佳解决方案 :) 文档在某些地方可能会令人困惑,也不要将其视为“上帝”,每个文档都有很多固执己见的想法。