Doctrine ZF2和实体经理(条令)

Doctrine ZF2和实体经理(条令),doctrine,zend-framework2,entitymanager,Doctrine,Zend Framework2,Entitymanager,我有个问题。我试图在没有控制器的情况下获得实体管理器,但我没有找到方法。 此时,我得到的实体管理器如下所示: (Controller) public function getEntityManager() { if (null === $this->_em) { $this->_em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); } return $

我有个问题。我试图在没有控制器的情况下获得实体管理器,但我没有找到方法。 此时,我得到的实体管理器如下所示:

(Controller)
public function getEntityManager()
{
    if (null === $this->_em) {
        $this->_em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
    }
    return $this->_em;
}

(Plugin)
public function getEntityManager()
{
    if($this->_em == null){
        $this->_em = $this->getController()->getServiceLocator()->get('doctrine.entitymanager.orm_default');
    }
    return $this->_em;
}
你看,我需要一个控制器。但是,如果我需要模型中的EntityManager,我有一个问题。我可以给模型一个控制器,但我认为这是一个很糟糕的方法


你有没有想过在没有控制器的情况下使用EntityManager?

我处理条令的方式是通过服务,我是这样做的:

//某个控制器
公共职能行动()
{
$service=$this->getServiceLocator()->get('my_entity_service');
返回新的ViewModel(数组(
“实体”=>$service->findAll()
));
}
服务->findAll()
的外观如下:

(Controller)
public function getEntityManager()
{
    if (null === $this->_em) {
        $this->_em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
    }
    return $this->_em;
}

(Plugin)
public function getEntityManager()
{
    if($this->_em == null){
        $this->_em = $this->getController()->getServiceLocator()->get('doctrine.entitymanager.orm_default');
    }
    return $this->_em;
}
公共函数findAll()
{
返回$this->getEntityRepository()->findAll();
}
现在我们需要定义
my\u entity\u服务
。我在
Module.php中执行此操作

公共函数getServiceConfig() { 返回数组( “工厂”=>数组( “我的实体服务”=>“名称空间\工厂\我的服务工厂” ) ); }
接下来我创建工厂(注意:这也可以通过Module.php中的匿名函数完成)

您真正的问题是“如何在我自己的类中获取ServiceManager实例”

为此,请查看文档:(页面底部)

默认情况下,Zend Framework MVC注册一个初始值设定项,该初始值设定项将 注入ServiceManager实例,它是 Zend\ServiceManager\ServiceLocatorInterface,插入任何类 实现Zend\ServiceManager\ServiceLocatorAwareInterface。A. 简单的实现如下所示

因此,在类中实现ServiceLocator接口,然后在类中调用:

$this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
或您已注册的任何其他服务