我需要检查实体是否为特定实体的实例,并在保存新实体后做一些事情。类似于cakephp中的afterSave方法。我试过postFlush,onFlush,postPersist和postLoad。
AppBundle / EventListener / DoSomethingAfterSaveNewEntity.php
namespace AppBundle\EventListener;
use Doctrine\ORM\Event\OnFlushEventArgs;
use AppBundle\Entity\SomeEntity;
class DoSomethingAfterSaveNewEntity
{
public function onFlush(OnFlushEventArgs $args)
{
$entity = $args->getEntity();
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
if (!$entity instanceof SomeEntity) {
die('not instance!!!');
}
die('post flush!!!');
$entityManager = $args->getEntityManager();
}
}
Run Code Online (Sandbox Code Playgroud)
您的想法是正确的,但是您应该为此创建一个新的EntityListener或EntitySubscriber。因此,实体本身不会听取其更改(不良做法)。
services.yml:
your.entity.subscriber:
class: AppBundle\Subscriber\YourEntitySubscriber
tags:
- { name: doctrine.event_subscriber, connection: default }
Run Code Online (Sandbox Code Playgroud)
YourEntitySubscriber.php:
<?php
namespace AppBundle\Subscriber;
use AppBundle\Entity\YourEntity;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
class YourEntitySubscriber implements EventSubscriber
{
/**
* @return array
*/
public function getSubscribedEvents()
{
return array(
'postPersist',
'postUpdate',
);
}
/**
* @param LifecycleEventArgs $args
*/
public function postPersist(LifecycleEventArgs $args)
{
// Do whatever you want (after entity creation)
}
/**
* @param LifecycleEventArgs $args
*/
public function postUpdate(LifecycleEventArgs $args)
{
// Do whatever you want
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以在此处获得更多示例:event_listeners_subscribers
| 归档时间: |
|
| 查看次数: |
1851 次 |
| 最近记录: |