Php 如何访问侦听器中保存的实体?
我正在做一个基于Symfony 2的项目。我已经注册了这样一个听众: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
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)
模式?是的,尝试过。一点也不匹配。好主意。