我有一个doctrine实体,它包含对文件的引用。删除实体后,还应使用@HasLifecycleCallbacks和preRemove()删除引用的文件。问题是,对实体中保存的文件的引用是相对路径,完成它的第一部分保存在zf2配置中。
如何从实体中访问zf2配置,以便我可以构建完整路径并删除文件?
答案 0 :(得分:3)
可以通过附加事件监听器将您想要的任何内容注入实体。
您的主Module.php
个文件:
namespace Application
class Module
{
public function onBootstrap (MvcEvent $e)
{
/*
* inject service manager into entities on postload event
*/
$serviceManager = $e->getApplication()->getServiceManager();
$doctrineEventManager = $serviceManager
->get('doctrine.entitymanager.orm_default')
->getEventManager();
$doctrineEventManager->addEventListener(
array(\Doctrine\ORM\Events::postLoad),
new \Application\Entity\InjectListener($serviceManager)
);
{
}
Application\Entity\InjectListener
上课:
namespace Application\Entity;
class InjectListener
{
private $sm;
public function __construct($sm)
{
$this->sm = $sm;
}
public function postload($eventArgs)
{
$entity = $eventArgs->getEntity();
$entity->setServiceManager($this->sm);
}
}
您的所有实体都必须使用方法setServiceManager
扩展类。在应用程序配置内部实体后:
$config = $this->sm->get('Configuration');
如果您不需要注入所有服务管理器,只需要配置,而不是setServiceManager
方法make setApplicationConfig
方法:
namespace Application\Entity;
class InjectListener
{
private $config;
public function __construct($sm)
{
$this->sm = $sm;
}
public function postload($eventArgs)
{
$entity = $eventArgs->getEntity();
$entity->setApplicationConfig(
$this->sm->get('Configuration')
);
}
}