ZF2 with Doctrine 2 - 在实体中注入依赖关系

gri*_*esi 9 zend-framework2

我在Zend Framework 2应用程序中使用Doctrine 2.有没有办法使用ZF2将依赖项注入Doctrine返回的实体?当从数据库中检索时,实体由Doctrine构造.据我所知,在ZF2中注入依赖项我需要使用Service Locator实例化实体.我无法看到如何将其与Doctrine集成,而无需修改Doctrines代码库.我现在能看到的唯一可行解决方案是编写一个小服务,它从Doctrine返回结果并注入所需的依赖项.有更优雅的解决方案吗?

最好的问候基督徒

tim*_*dev 16

查看Doctrine EventManager,特别是postLoad生命周期事件,每次从数据库加载实体时,EventManager都会触发该事件.

要把它全部挂钩到ZF2,你需要做几件事.

首先,编写一个Doctrine-Flavored事件监听器:

<?php
class InjectStuffListener {
   private $sl;

   public function __construct($serviceLocator){
      $this->sl = $serviceLocator;
   }

   public function postLoad($eventArgs){
       $entity = $eventArgs->getEntity;
       $entity->setThingToBeInjected($this->sl->get('some.thing'));
   }
}
Run Code Online (Sandbox Code Playgroud)

然后,在某些地方,比如某些Module.php(也许有比onBootstrap更好的地方,但无论如何):

<?php
public function onBootstrap(){
    $sm = $e->getApplication()->getServiceManager();
    $em = $sm->get('doctrine.entitymanager.orm_default');
    $dem = $em->getEventManager();
    $dem->addEventListener(array( \Doctrine\ORM\Events::postLoad ), new InjectStuffListener( $sm ) );

}
Run Code Online (Sandbox Code Playgroud)