类中的Symfony2依赖项

时间:2012-02-08 18:56:24

标签: dependency-injection symfony

我尝试创建一个类来管理我的应用程序的某些部分 但我需要访问resources / config.yml

中的配置

我尝试使用containerAware扩展我的类作为控制器 但他没有设置容器......

我希望能够做到这样的事情:

class MyClass extends ContainerAware
{
   public function myFunciton()
   {
      $em = $this->get('Doctrine')->getEntityManager();
   }
}

欢迎任何建议

1 个答案:

答案 0 :(得分:4)

扩展ContainerAware不会自动授予对服务容器的访问权限 - 您需要将容器注入您的类。有两种方法可以做到这一点:

  • 如果您的班级已注册为服务,则可以注入@service_container
  • 如果您的类不是服务,而是从可以访问容器的类(如控制器)访问,则可以显式调用setContainer()

话虽如此,你不应该将容器注入你的课程。这使得测试类更难。除此之外有一些例外情况,但它们并不经常出现。

相反,您应该只注入所需的服务。对于实体管理器,您将注入@doctrine.orm.default_entity_manager

关于从config.yml访问数据,我建议包括文件(可以在定义服务时完成)并使用Symfony\Component\Yaml\ParserSymfony\Component\Yaml\Yaml解析yml。解析器将yml字符串转换为PHP变量,然后您可以轻松使用它。