我需要在我的服务中获得当前的应用环境。
我发现我可以从内核中获取它,但很多人说注入内核是个坏主意。
有人可以解释一下为什么它被认为是不好的做法?
溶解是否比将整个容器注入我的服务更好?
my_app.my_not_so_great_service:
class: AppBundle\Services\AppService
arguments:
- "@kernel"
答案 0 :(得分:3)
Richard Miller的文章 [0] 解释了这个问题。它的要点是,取决于当前的应用程序环境是一个设计糟糕的架构的代码味道,并将使您依赖于具体的实现。
您不能轻易(热)交换不同环境的实现逻辑,因为您可能会对一堆if / switch语句进行编码。相反,您应该使用可以代表不同环境的抽象。
应用程序不应该知道它正在运行的环境 在它下面,应该根据它配置一种特定的方式 配置文件。因为我们想要改变之间的配置 不同的环境通常有不同的配置 每个环境。我们选择这些套装中的哪一套 配置加载而不是告诉应用程序 它所处的环境。
[0] http://richardmiller.co.uk/2013/05/28/symfony2-avoiding-coupling-applications-to-the-environment/
答案 1 :(得分:2)
内核对象包含整个应用程序,如果您需要环境,只需注入它:
my_app.my_service:
class: AppBundle\Services\MyAppService
arguments:
- '%kernel.environment%'