如何在Symfony 2中访问非控制器功能内的服务

时间:2011-10-09 08:47:50

标签: php symfony php-5.3

您可以使用以下方式访问控制器内的(比方说)Doctrine服务:

$d = $this->getDoctrine()

现在我希望我的控制器调用另一个函数(在另一个类中),我希望该类可以访问所有服务。如果不将服务作为变量传递,是否可能?

1 个答案:

答案 0 :(得分:4)

您必须为您的类或方法注入依赖服务。如果您正在考虑一些全局对象,您可能无处可访问,而不是正确的方法(并且您无法以这种方式实际访问容器)。你会错过依赖注入的全部内容。

您可以通过两种方式向您的班级注入服务:

  • 手动
  • 让DIC这样做

第一个解决方案要求您自己传递依赖关系(构造函数,设置器,方法)。

后面的解决方案意味着您将类定义为服务,并让容器构造它并注入依赖项。只有在可以将对象创建委托给DIC时才能执行此操作。例如,无法使用实体进行此操作。

小心注射整个容器。这不是最好的做法。您将根据配置引入可能具有不同服务的整个容器的依赖性。依赖性不明确。