← Back
Editing: EasyAdminEventDispatcherSubscriber.php
<?php namespace App\EventSubscriber; use App\Entity\User; use App\Event\UserBeforeCreateEvent; use App\Event\UserBeforeUpdateEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\AbstractLifecycleEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent; use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; final class EasyAdminEventDispatcherSubscriber implements EventSubscriberInterface { private const BEFORE_CREATE_EVENT_MAPPER = [ User::class => UserBeforeCreateEvent::class, ]; private const BEFORE_UPDATE_EVENT_MAPPER = [ User::class => UserBeforeUpdateEvent::class, ]; public function __construct(private readonly EventDispatcherInterface $dispatcher) { } public static function getSubscribedEvents(): array { return [ BeforeEntityPersistedEvent::class => ['sendBeforeEntityEvents'], BeforeEntityUpdatedEvent::class => ['sendBeforeEntityEvents'], ]; } public function sendBeforeEntityEvents(AbstractLifecycleEvent $event): void { $entity = $event->getEntityInstance(); match (get_class($event)) { BeforeEntityPersistedEvent::class => $this->sendEvent($entity, self::BEFORE_CREATE_EVENT_MAPPER), BeforeEntityUpdatedEvent::class => $this->sendEvent($entity, self::BEFORE_UPDATE_EVENT_MAPPER), }; } /** * @param array<class-string, class-string> $eventMap */ private function sendEvent(object $entity, array $eventMap): void { if (!isset($eventMap[get_class($entity)])) { return; } $eventFqcn = $eventMap[get_class($entity)]; $event = new $eventFqcn($entity); $this->dispatcher->dispatch($event, $event::NAME); } }
Save File
Cancel