Skip to content

Commit

Permalink
Simplified events sorting
Browse files Browse the repository at this point in the history
  • Loading branch information
maryo committed Oct 23, 2016
1 parent c351c96 commit 860ab19
Showing 1 changed file with 8 additions and 17 deletions.
25 changes: 8 additions & 17 deletions src/DoctrineDomainEventDispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,6 @@ public function getSubscribedEvents(): array
return [Events::postFlush, Events::postRemove];
}

/**
* @param array $a
* @param array $b
* @return int
* @internal
*/
public function compareEventsOrder(array $a, array $b): int
{
return $a[0] <=> $b[0];
}

/**
* @param object $entity
*/
Expand All @@ -62,7 +51,7 @@ private function dispatchEventsOnTransactionEnd()
return;
}

$events = [];
$eventsByOrder = [];

foreach ($this->entityManager->getUnitOfWork()->getIdentityMap() as $entities) {
foreach ($entities as $entity) {
Expand All @@ -72,19 +61,21 @@ private function dispatchEventsOnTransactionEnd()

foreach ($this->eventProviders as $eventProvider) {
foreach ($eventProvider->popEvents() as $order => $event) {
$events[] = [$order, $event];
$eventsByOrder[$order][] = $event;
}
}

if (!$events) {
if (!$eventsByOrder) {
return;
}

$this->clearChangeSets();
usort($events, [$this, 'compareEventsOrder']);
ksort($eventsByOrder);

foreach ($events as list(, $event)) {
$this->entityManager->getEventManager()->dispatchEvent($event->name(), $event);
foreach ($eventsByOrder as $events) {
foreach ($events as $event) {
$this->entityManager->getEventManager()->dispatchEvent($event->name(), $event);
}
}
}

Expand Down

0 comments on commit 860ab19

Please sign in to comment.