2017-06-08 33 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监听器...我错了吗? –