原则-实体侦听器中注入的实体之间的差异

时间:2018-09-19 07:53:29

标签: php symfony doctrine-orm

我们在official documentation中看到,Doctrine实现了实体侦听器,仅在特定实体上发生某些情况时才执行。

但是,生命周期事件侦听器/订阅者与实体侦听器之间会有不同的注入。实际上,对于听众/订阅者,Doctrine仅将LifecycleEventArgs对象注入已定义的回调中

// Event listener/subscriber
public function postUpdate(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
}

无论如何都可以让您访问实体,但是随后在实体侦听器中,实体也被显式注入为第一个参数

// Entity listener
public function postUpdate(object $entity, LifecycleEventArgs $args)
{
    $entity2 = $args->getEntity();
}

,它在$args中仍然可用。文档中也对此进行了报告:

  

实体侦听器方法接收两个参数,即实体实例   和生命周期事件。

但是实体侦听器中的$entity$args->getEntity()之间到底有什么区别?

1 个答案:

答案 0 :(得分:0)

是同一实体。

由于LifecycleEventArgs甚至被注入“通用”学说监听器中,因此您需要检索实体对象。另一方面,LifecycleEventArgs在这两种情况下都可以检索很多内容。

为此,他们在两个操作中都使用了相同的对象:这在我的POV中很常见并且可以接受。

您可以通过类似的操作自己进行验证

// Entity listener
public function postUpdate(object $entity, LifecycleEventArgs $args)
{
    $entity2 = $args->getEntity();
    dump(spl_obj_hash($entity) == spl_obj_hash($entity)); // you can echo this, or log, or VarDump, or whatever
}