我在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)