【问题标题】:Get Doctrine inside Symfony 2.4 Entity Listener在 Symfony 2.4 Entity Listener 中获取 Doctrine
【发布时间】: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


    【解决方案1】:

    我错误地假设$entityManager 仅适用于文档实体。其实你不需要注入任何东西,你可以简单地使用:

    $repository = $entityManager->getRepository('ProjectDefaultBundle:SomeOtherEntity')...
    

    通过How to get foreign repository inside my repository in Doctrine2/Symfony2?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2015-08-24
      • 1970-01-01
      • 2017-02-19
      • 2017-01-13
      相关资源
      最近更新 更多