【发布时间】:2014-05-04 20:01:04
【问题描述】:
我正在使用新的Entity Listeners,它非常适合触发它们的实体。但是,在 Listener 中我想访问其他实体的数据,本质上是发出一些数据库请求。
为此,我使用setter injection
<?php
// Project/DefaultBundle/EventListener/SomeIndexer.php
namespace Project\DefaultBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Project\DefaultBundle\Entity\Document;
use Doctrine\ORM\EntityManager;
class SomeIndexer
{
protected $em;
public function setEntityManager(EntityManager $em)
{
$this->em = $em;
}
public function prePersist(Document $doc, LifecycleEventArgs $args)
{
// this is my Document entity which works fine
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
if ( $entity instanceof Document )
{
// em doesn't seem to be an object
$this->em->getRepository('ProjectDefaultBundle:SomeOtherEntity') ...
}
}
}
在我的服务配置中
// Project/DefaultBundle/Resources/config/services.yml
services:
timeline.eventlistener.tripindexer:
class: Project\DefaultBundle\EventListener\SomeIndexer
calls:
- [setEntityManager, ["@doctrine.orm.entity_manager"]]
【问题讨论】:
标签: php symfony doctrine-orm doctrine