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');
或您已注册的任何其他服务