Symfony 如何在持久化实体时创建事件侦听器
我对Symfony上的事件监听器非常陌生,我想找到一种好方法,在特定实体(即用户)被持久化时触发事件Symfony 如何在持久化实体时创建事件侦听器,symfony,doctrine-orm,Symfony,Doctrine Orm,我对Symfony上的事件监听器非常陌生,我想找到一种好方法,在特定实体(即用户)被持久化时触发事件 我已经搜索了文档,虽然我找到了对onKernel事件的引用,但是我无法为我需要的创建一个监听器。你能给我指一下正确的方向或给我举个例子吗 这是一个很好的记录 基本上,您创建了一个实现doctor\Common\EventSubscriber的类,然后有了一个方法getSubscribedEvents()在其中添加要触发它的事件,它看起来像: public function getSubscrib
我已经搜索了文档,虽然我找到了对onKernel事件的引用,但是我无法为我需要的创建一个监听器。你能给我指一下正确的方向或给我举个例子吗 这是一个很好的记录 基本上,您创建了一个实现
doctor\Common\EventSubscriber
的类,然后有了一个方法getSubscribedEvents()
在其中添加要触发它的事件,它看起来像:
public function getSubscribedEvents()
{
return ['postPersist'];
}
public function postPersist(LifecycleEventArgs $args)
{
$object = $args->getEntity();
if (!$object instanceof User) {
return;
}
$this->doSomething($object);
}
这是很好的记录 基本上,您创建了一个实现
doctor\Common\EventSubscriber
的类,然后有了一个方法getSubscribedEvents()
在其中添加要触发它的事件,它看起来像:
public function getSubscribedEvents()
{
return ['postPersist'];
}
public function postPersist(LifecycleEventArgs $args)
{
$object = $args->getEntity();
if (!$object instanceof User) {
return;
}
$this->doSomething($object);
}
您应该从
EventSubscriber
类实现,并且可以使用以下事件:
prePersist
,preUpdate
,postPersist
,postUpdate
例如:
ApplicationBundle/EventSubscriber/EntitySubscriber.php
namespace App\ApplicationBundle\EventSubscriber;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
/**
* Class EntitySubscriber
*/
class EntitySubscriber implements EventSubscriber
{
/**
* Get subscribed events
*
* @return array
*/
public function getSubscribedEvents()
{
return [
'preUpdate',
];
}
/**
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args)
{
/** @var PreUpdateEventArgs $args */
$entity = $args->getEntity();
$changes = $args->getEntityChangeSet();
dump($changes);
}
}
您应该从
EventSubscriber
类实现,并且可以使用以下事件:
prePersist
,preUpdate
,postPersist
,postUpdate
例如:
ApplicationBundle/EventSubscriber/EntitySubscriber.php
namespace App\ApplicationBundle\EventSubscriber;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
/**
* Class EntitySubscriber
*/
class EntitySubscriber implements EventSubscriber
{
/**
* Get subscribed events
*
* @return array
*/
public function getSubscribedEvents()
{
return [
'preUpdate',
];
}
/**
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args)
{
/** @var PreUpdateEventArgs $args */
$entity = $args->getEntity();
$changes = $args->getEntityChangeSet();
dump($changes);
}
}
完整性:
如果只需要在一个实体类(例如,User
)上处理一个生命周期事件(例如,prePersist
),则可以使用中记录的4个选项中的任何一个,但可能更合适的选项是生命周期回调或实体侦听器
生命周期回调示例:
在您的实体中:
namespace-App\Entity;
使用条令\ORM\Mapping作为ORM;
/**
*@ORM\Entity
*@ORM\HasLifecycleCallbacks完整性:
如果只需要在一个实体类(例如,User
)上处理一个生命周期事件(例如,prePersist
),则可以使用中记录的4个选项中的任何一个,但可能更合适的选项是生命周期回调或实体侦听器
生命周期回调示例:
在您的实体中:
namespace-App\Entity;
使用条令\ORM\Mapping作为ORM;
/**
*@ORM\Entity
*@ORM\HasLifecycleCallbacks