簡體   English   中英

在Symfony 2.4實體監聽器中獲取主義

[英]Get Doctrine inside Symfony 2.4 Entity Listener

我正在使用新的實體偵聽器 ,它們對於觸發它們的實體非常有用。 但是,在偵聽器中,我想從其他實體訪問數據,本質上是發出一些數據庫請求。

為此,我正在使用二傳手注射

<?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"]]

我有一個錯誤的假設,即$entityManager僅適用於文檔實體。 實際上,您不需要注入任何東西,只需使用:

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

通過如何在Doctrine2 / Symfony2的存儲庫中獲取外部存儲庫?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM