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

时间:2011-11-05 17:52:34

标签: doctrine-orm symfony

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

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

两者都失败了,这导致我尝试使用我的自定义类/服务扩展Controller类,并且在一个巨大的火球中死亡。

2 个答案:

答案 0 :(得分:8)

必须将控制器定义为服务才能访问EntityManager。上面提到的Controller::getDoctrine()方法只是在检查了doctrine服务实际可用后调用$this->container->get('doctrine')后才返回Doctrine注册表。

只需使您的自定义类/控制器扩展ContainerAware并定义一个快捷方法,如:

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

请注意,在扩展/实施$this->container->get(..)的类中,它是$this->get(..)而不是ContainerAware

答案 1 :(得分:7)

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

my.service.name:
  class:     my\class
  arguments: [ @doctrine.orm.default_entity_manager ]

确保您的服务的__construct方法将实体管理器作为参数。

有关详细信息,请参阅Service Container chapter

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

的类