【发布时间】:2012-04-26 03:00:02
【问题描述】:
我很难理解 Symfony2 服务。我到处都读过很多东西(包括 SO 中的一些),但似乎没有一个能完全解释它。
假设我有一个包 A 和一个单独的包 B。我希望 B 功能可用于 A 包。我想将 B 注入到服务容器中,以便 A 能够使用它。
哪个包应该有一个服务目录?哪一个应该有配置文件?两者都需要吗?扩展在哪里?为什么?
【问题讨论】:
我很难理解 Symfony2 服务。我到处都读过很多东西(包括 SO 中的一些),但似乎没有一个能完全解释它。
假设我有一个包 A 和一个单独的包 B。我希望 B 功能可用于 A 包。我想将 B 注入到服务容器中,以便 A 能够使用它。
哪个包应该有一个服务目录?哪一个应该有配置文件?两者都需要吗?扩展在哪里?为什么?
【问题讨论】:
Bundle B 需要一个扩展才能加载它的 services.xml 文件。
Bundle B 需要它的 services.xml 文件中的一个条目来定义服务。
Bundle B 将具有包含您的服务类的 Services 目录,该类公开了所需的功能。
Bundle A 不需要任何特殊的东西。它将能够使用容器访问Bundle B所暴露的服务。只需要知道服务ID即可。
在您提供一些服务之前,这会让人感到困惑。
【讨论】:
首先阅读这两个问题和我对它们的回答:
假设您谈论的是特定于应用程序的捆绑包,我建议您只使用一个捆绑包并将服务排除在外。然后,您可以通过多种方式注册您的服务:
config.yml,AppBundle 中创建extension class,或JMSDiExtraBundle 的注释——这是我个人更喜欢的。【讨论】: