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

时间:2018-05-04 09:56:28

标签: php symfony events doctrine

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

services:
    app.video_release_listener:
        class: CmsBundle\EventListener\Video\VideoReleaseListener
        tags:
            - { name: doctrine.event_listener, event: postPersist }

...我的听众课程看起来像这样:

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()语句周围对类进行条件检查,以查看是否可能有另一个具有不同对象的迭代。没有第二次迭代。

1 个答案:

答案 0 :(得分:0)

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

/**
 * @ORM\EntityListeners({"CmsBundle\EventListener\Video\VideoReleaseListener"})
*/

...然后将我的VideoReleaseListener方法名称切换为postUpdate()。 (出于某种原因,它拒绝以postPersist()身份工作。)

无论如何,这是非常不稳定的行为,但也许这有助于某人。