Doctrine orm ZF2和x2B;第2条及;访问zf配置
我有一个条令实体,它持有对文件的引用。删除实体时,还应使用@HasLifecycleCallbacks和preRemove()删除引用的文件。问题是,对保存在实体中的文件的引用是一个相对路径,完成它的第一部分保存在zf2配置中Doctrine orm ZF2和x2B;第2条及;访问zf配置,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我有一个条令实体,它持有对文件的引用。删除实体时,还应使用@HasLifecycleCallbacks和preRemove()删除引用的文件。问题是,对保存在实体中的文件的引用是一个相对路径,完成它的第一部分保存在zf2配置中 如何从实体中访问zf2配置,以便生成完整路径并删除文件?可以通过附加事件侦听器将任何您想要的内容注入实体 您的主Module.php文件: namespace Application class Module { public function onBootst
如何从实体中访问zf2配置,以便生成完整路径并删除文件?可以通过附加事件侦听器将任何您想要的内容注入实体 您的主
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
class:
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');
如果不需要注入所有service manager,只需配置,而不是setServiceManager
method makesetApplicationConfig
method:
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')
);
}
}
要稍微更新一下这个答案,如果您不想更新所有的实体,您应该创建一个接口,并在需要它的实体中实现。因此,类似于
ServiceManagerAwareInterface
,然后您可以轻松地检查您的InjectListener::postLoad()
实体是否是ServiceManagerAwareInterface
的实例,如果是,您可以设置管理器。