在Symfony 2.4实体监听器中获取Doctrine


Get Doctrine inside Symfony 2.4 Entity Listener

我正在使用新的实体侦听器,这对于触发它们的实体来说非常有效。然而,在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的存储库中获得外部存储库?