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

Nic*_*ick 5 symfony doctrine-orm

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

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

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

dyl*_*ver 8

必须按顺序访问的EntityManager来定义你的控制器作为一个服务.Controller::getDoctrine()上面提到的方法只是$this->container->get('doctrine')在检查了doctrine服务实际可用之后通过调用返回Doctrine Registry .

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

public function getEntityManager() {
    return $this->container->get('doctrine')->getEntityManager();
}
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*nte 7

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

my.service.name:
  class:     my\class
  arguments: [ @doctrine.orm.default_entity_manager ]
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅服务容器章节.

BTW,$this->getDoctrine()是一种只能在扩展的类中工作的快捷方法Symfony\Bundle\FrameworkBundle\Controller\Controller