Php 如何访问侦听器中保存的实体?

Php 如何访问侦听器中保存的实体?,php,symfony,events,doctrine,Php,Symfony,Events,Doctrine,我正在做一个基于Symfony 2的项目。我已经注册了这样一个听众: services: app.video_release_listener: class: CmsBundle\EventListener\Video\VideoReleaseListener tags: - { name: doctrine.event_listener, event: postPersist } /** * @ORM\EntityListen

我正在做一个基于Symfony 2的项目。我已经注册了这样一个听众:

services:
    app.video_release_listener:
        class: CmsBundle\EventListener\Video\VideoReleaseListener
        tags:
            - { name: doctrine.event_listener, event: postPersist }
/**
 * @ORM\EntityListeners({"CmsBundle\EventListener\Video\VideoReleaseListener"})
*/
。。。我的listener类如下所示:

namespace CmsBundle\EventListener\Video;

use Doctrine\ORM\Event\LifecycleEventArgs;
use AppBundle\Entity\Video;

class VideoReleaseListener
{
    public function postPersist(LifecycleEventArgs $args){
        $entity = $args->getEntity();
        die(get_class($entity));
    }
}
。。。我曾希望在保存视频时,它会吐出我的视频实体的类名。相反,它吐出了
Gedmo\Loggable\Entity\LogEntry
——这不是我想要的

如何从侦听器中访问我的视频实体?

====


编辑:我还尝试在我的
die()
语句周围对类进行条件检查,以查看是否有另一个使用不同对象的迭代。没有出现第二次迭代。

我没有按照描述完全解决问题,但我通过在我的
视频
类上添加
@ORM\EntityListeners
标记来解决它,如下所示:

services:
    app.video_release_listener:
        class: CmsBundle\EventListener\Video\VideoReleaseListener
        tags:
            - { name: doctrine.event_listener, event: postPersist }
/**
 * @ORM\EntityListeners({"CmsBundle\EventListener\Video\VideoReleaseListener"})
*/
。。。然后将我的VideoReleaseListener方法名称切换为
postUpdate()
。(由于某种原因,它拒绝充当
postPersist()


不管怎么说,这是非常古怪的行为,但也许这对某人有帮助

这对我来说是正确的。由于您正在调用
die
,您确定这不仅仅是函数的第一次迭代(即,另一个实体被持久化)?
postPersist
的一个常见模式是在顶部检查
if($entity instanceof Foo)
,因为每个被持久化的实体都会调用您的侦听器。很可能这是第一次迭代。我尝试了一个更复杂的逻辑版本来测试第二次迭代,但没有发生。这似乎是唯一一次调用侦听器。您是否正在更新已存在的实体?您是否尝试过方法顶部的
if($entity instanceof yourrentity)
模式?是的,尝试过。一点也不匹配。好主意。