Nic*_*ick 5 symfony doctrine-orm
在Symfony2中,如何将Doctrine的实体管理器添加到自定义类或服务中?
我曾尝试$em = $this->get("doctrine.orm.entity_manager");
和$em = $this->getDoctrine()->getEntityManager();
两者都失败了,这导致我尝试使用我的自定义类/服务扩展Controller类,并且在一个巨大的火球中死亡.
你不必须按顺序访问的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.
您需要将实体管理器服务注入您的自定义服务.您的服务定义应如下所示:
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