Doctrine orm 如何将实体管理器添加到自定义类或服务?

Doctrine orm 如何将实体管理器添加到自定义类或服务?,doctrine-orm,symfony,Doctrine Orm,Symfony,在Symfony2中,我如何将Doctrine的实体管理器添加到自定义类或服务中 我试过$em=$this->get(“doctrine.orm.entity_manager”) 和$em=$this->getDoctrine()->getEntityManager() 两者都失败了,这导致我尝试用我的自定义类/服务扩展控制器类,但最终失败了。您需要将实体管理器服务注入到自定义服务中。您的服务定义应如下所示: my.service.name: class: my\class ar

在Symfony2中,我如何将Doctrine的实体管理器添加到自定义类或服务中

我试过
$em=$this->get(“doctrine.orm.entity_manager”)
$em=$this->getDoctrine()->getEntityManager()


两者都失败了,这导致我尝试用我的自定义类/服务扩展控制器类,但最终失败了。

您需要将实体管理器服务注入到自定义服务中。您的服务定义应如下所示:

my.service.name:
  class:     my\class
  arguments: [ @doctrine.orm.default_entity_manager ]
确保您的服务的
\u构造
方法将实体管理器作为参数

有关更多信息,请参阅

顺便说一句,
$this->getDoctrine()
是一种快捷方法,它只在扩展了
Symfony\Bundle\FrameworkBundle\Controller\Controller

的类中起作用,您不必将控制器定义为服务来访问EntityManager。上面提到的
Controller::getdoctor()
方法在检查条令服务是否实际可用后,通过调用
$this->container->get('doctor')
返回条令注册表

只需将自定义类/控制器扩展为containerware
,并定义一个快捷方式方法,如:

public function getEntityManager() {
    return $this->container->get('doctrine')->getEntityManager();
}

请注意,它是
$this->container->get(…)
而不是
$this->get(…)
在扩展/实现
containerware

的类中工作得很好!谢谢你,伙计:)当使用上述方法时,我得到“对…中的非对象调用成员函数get()”。你是否扩展了
containerware
?containerware在哪里?在Symfony 2.3中,我使用的是“@doctrine.orm.entity_manager”。“@doctor.orm.entity\u manager”和“@doctor.orm.default\u entity\u manager”之间有区别吗?