我正在使用新的实体侦听器,这对于触发它们的实体来说非常有效。然而,在Listener中,我想访问来自其他实体的数据,本质上是做一些数据库请求。
为此,我使用setter注入
<?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') ...
}
}
}
和my services中的config
// Project/DefaultBundle/Resources/config/services.yml
services:
timeline.eventlistener.tripindexer:
class: Project'DefaultBundle'EventListener'SomeIndexer
calls:
- [setEntityManager, ["@doctrine.orm.entity_manager"]]
我有一个错误的假设,即$entityManager
仅用于文档实体。事实上,你不需要注入任何东西,你可以简单地使用:
$repository = $entityManager->getRepository('ProjectDefaultBundle:SomeOtherEntity')...
如何在Doctrine2/Symfony2的存储库中获得外部存储库?