eventDispatcher = $eventDispatcher; } public function getSubscribedEvents(): array { return [ 'preUpdate', 'postFlush', ]; } public function preUpdate(PreUpdateEventArgs $event): void { /** @var User $entity */ $entity = $event->getObject(); if (!$entity instanceof User) { return; } if ($event->hasChangedField('login')) { $this->renames[] = new UserRenameEvent($entity, $event->getOldValue('login')); } } public function postFlush(PostFlushEventArgs $event): void { if (0 !== count($this->renames)) { // Creating event for dispatch $usersRenamedEvent = new UsersRenamedEvent($this->renames); $em = $event->getEntityManager(); foreach ($this->renames as $item) { $em->persist($item); } $this->renames = []; $em->flush(); $this->eventDispatcher->dispatch(UsersRenamedEvent::NAME, $usersRenamedEvent); } } }