Dependency injection 类中的Symfony2依赖项

Dependency injection 类中的Symfony2依赖项,dependency-injection,symfony,Dependency Injection,Symfony,我尝试创建一个类来管理我的应用程序的某些部分 但是我需要访问resources/config.yml中的配置 我试图用ContainerWare作为控件来扩展我的类 但容器没有设置好 我希望能够做到这一点: class MyClass extends ContainerAware { public function myFunciton() { $em = $this->get('Doctrine')->getEntityManager(); } }

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

我试图用ContainerWare作为控件来扩展我的类 但容器没有设置好

我希望能够做到这一点:

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

欢迎任何建议

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

  • 如果您的类注册为服务,则可以插入
    @service\u容器
  • 如果您的类不是服务,而是从具有容器访问权限的类(如控制器)访问的,则可以显式调用
    setContainer()
也就是说,您不应该将容器注入到类中。这使得测试你的课程变得更加困难。这方面有一些例外,但它们并不经常出现

相反,您应该只注入您需要的服务。对于实体管理器,您将注入
@doctrine.orm.default\u entity\u manager


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

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

  • 如果您的类注册为服务,则可以插入
    @service\u容器
  • 如果您的类不是服务,而是从具有容器访问权限的类(如控制器)访问的,则可以显式调用
    setContainer()
也就是说,您不应该将容器注入到类中。这使得测试你的课程变得更加困难。这方面有一些例外,但它们并不经常出现

相反,您应该只注入您需要的服务。对于实体管理器,您将注入
@doctrine.orm.default\u entity\u manager


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

我的建议是仔细研究参考手册中有关服务的部分。一旦您完成了这个过程,那么将实体管理器注入MyClass就变得很简单了。我的建议是仔细研究参考手册中有关服务的部分。一旦您完成了这个过程,那么将实体管理器注入MyClass就变得很简单了。这对实体有效吗?是否希望能够自我保存实体?例如:$entity->save()否。实体是普通的PHP对象。他们不了解实体经理,也不应该了解。你想到的是条令1中的活动记录模式。条令2使用数据映射器模式。这对实体有效吗?是否希望能够自我保存实体?例如:$entity->save()否。实体是普通的PHP对象。他们不了解实体经理,也不应该了解。你想到的是条令1中的活动记录模式。条令2使用数据映射器模式。