2017-06-08 22 views
0

我想在symfony項目, 教義事件上班以下symfony的文檔我有這樣的代碼主義LifecycleEventArgs返回Gedmo 可記錄的實體 LogEntry

public function postPersist(LifecycleEventArgs $args) 
{ 
    $entity = $args->getEntity(); 


    if (!$entity instanceof Rubrique) { 
     return; 
    } 

    $entityManager = $args->getEntityManager(); 
    // do some stuff 
} 

的問題是,$entity不預期對象Rubrique,但Gedmo\Loggable\Entity\LogEntry的實例可能是因爲RubriqueLoggable。我如何才能訪問我的實體以便按照我的需要操作它? 感謝

+0

'postPersist'應該被調用兩次。一次用於'Rubrique',一次用於'LogEntry'。你測試過了嗎? – naitsirch

回答

1

此事件偵聽器是一個"generic" one,而不是一個doctrine entity listener

這意味着,引發該事件爲每個實體堅持:如果你有RubriqueLogEntry之間的關係,可能比你正在檢查只有他們的「第一」是「postPersisted」。

如果您只需要一種特定的偵聽器,請考慮使用doctrine實體偵聽器(上面鏈接)。

而且請記住,「通用」偵聽器將偵聽(或將訂閱)爲實體的事件不是(所以,基本上,它可以被調用了很多次)何在主義實體監聽器。

+0

感謝您的回答,是的,我需要這個事件爲我所有的實體。我的問題是我如何檢索我的實體,因爲getEntity()方法返回Gedmo \ Loggable \ Entity \ LogEntry,而不是我的實體 –

+1

@M.Smaïne如所述, 'getEntity'將返回不同類型的實體:由您來驗證實體是什麼,如果'Rubrique'沒有被刷新,檢查爲什麼不刷新或從其他對象中檢索。 – DonCallisto

+0

我給你更多的細節,也許你會再次幫助我。我開發了一個saas應用程序。每個實體與實體客戶都有多對一的關係。我會在每次添加實體操作後設置客戶端。這就是爲什麼我使用Doctrine監聽器...我錯了嗎? –