src/EventSubscriber/EasyAdminSubscriber.php line 36
<?phpnamespace App\EventSubscriber;use App\Controller\Admin\Crud\TransportCrudController;use App\Entity\Transport;use App\Model\UseCases\MailerUseCase;use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/*** Based on https://symfony.com/bundles/EasyAdminBundle/current/events.html*/class EasyAdminSubscriber implements EventSubscriberInterface{private array $emailsBeforeEditing = [];public function __construct(private readonly AdminContextProvider $adminContextProvider,private readonly MailerUseCase $mailerUseCase,){}public static function getSubscribedEvents(): array{return [BeforeCrudActionEvent::class => ['rememberDriverEmail'],AfterEntityUpdatedEvent::class => ['notifyDriver'],];}public function rememberDriverEmail(BeforeCrudActionEvent $event): void{$crud = $event->getAdminContext()->getCrud();if ($crud->getControllerFqcn() !== TransportCrudController::class || $crud->getCurrentPage() !== Crud::PAGE_EDIT) {return;}$entity = $this->adminContextProvider->getContext()->getEntity()?->getInstance();if (!$entity instanceof Transport) {return;}$this->emailsBeforeEditing[$entity->getId()] = $entity->getDriverEmail() ?? '';}public function notifyDriver(AfterEntityUpdatedEvent $event): void{$entity = $event->getEntityInstance();if (!$entity instanceof Transport) {return;}$oldEmail = $this->emailsBeforeEditing[$entity->getId()] ?? '';$newEmail = $entity->getDriverEmail();if ($newEmail && $newEmail !== $oldEmail) {$this->mailerUseCase->sendUit($entity);}}}