Skip to content

Commit 2639386

Browse files
#88: Used ListenersInvoker instead of EventManager to dispatch events
1 parent 32d9593 commit 2639386

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/EventSubscriber.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Doctrine\Common\EventSubscriber as DoctrineEventSubscriber;
2626
use Doctrine\ORM\EntityManagerInterface;
2727
use Doctrine\ORM\Event\LifecycleEventArgs;
28+
use Doctrine\ORM\Event\ListenersInvoker;
2829
use Doctrine\ORM\Event\OnFlushEventArgs;
2930
use Doctrine\ORM\Event\PostFlushEventArgs;
3031
use Doctrine\ORM\Event\PreUpdateEventArgs;
@@ -90,7 +91,8 @@ public function preUpdate(PreUpdateEventArgs $eventArgs): void
9091
{
9192
$entity = $eventArgs->getObject();
9293
$entityManager = $eventArgs->getEntityManager();
93-
$eventManager = $entityManager->getEventManager();
94+
$classMetadata = $entityManager->getClassMetadata(get_class($entity));
95+
$listenersInvoker = new ListenersInvoker($entityManager);
9496
$connection = $entityManager->getConnection();
9597
$transactionNestingLevel = $connection->getTransactionNestingLevel();
9698

@@ -99,14 +101,19 @@ public function preUpdate(PreUpdateEventArgs $eventArgs): void
99101

100102
$eventArgs = new UpdateEventArgs($entity, $originalEntity, $entityManager);
101103

102-
$eventManager->dispatchEvent(Events::preUpdateEnhanced, $eventArgs);
104+
$invoke = $listenersInvoker->getSubscribedSystems($classMetadata, Events::preUpdateEnhanced);
105+
106+
if ($invoke !== ListenersInvoker::INVOKE_NONE) {
107+
$listenersInvoker->invoke($classMetadata, Events::preUpdateEnhanced, $entity, $eventArgs, $invoke);
108+
}
103109
}
104110

105111
public function postUpdate(LifecycleEventArgs $eventArgs): void
106112
{
107113
$entity = $eventArgs->getObject();
108114
$entityManager = $eventArgs->getEntityManager();
109-
$eventManager = $entityManager->getEventManager();
115+
$classMetadata = $entityManager->getClassMetadata(get_class($entity));
116+
$listenersInvoker = new ListenersInvoker($entityManager);
110117
$connection = $entityManager->getConnection();
111118
$transactionNestingLevel = $connection->getTransactionNestingLevel();
112119

@@ -115,7 +122,11 @@ public function postUpdate(LifecycleEventArgs $eventArgs): void
115122

116123
$eventArgs = new UpdateEventArgs($entity, $originalEntity, $entityManager);
117124

118-
$eventManager->dispatchEvent(Events::postUpdateEnhanced, $eventArgs);
125+
$invoke = $listenersInvoker->getSubscribedSystems($classMetadata, Events::postUpdateEnhanced);
126+
127+
if ($invoke !== ListenersInvoker::INVOKE_NONE) {
128+
$listenersInvoker->invoke($classMetadata, Events::postUpdateEnhanced, $entity, $eventArgs, $invoke);
129+
}
119130
}
120131

121132
public function postFlush(PostFlushEventArgs $eventArgs): void

0 commit comments

Comments
 (0)