<?php
namespace App\EventSubscriber;
use App\Entity\AdminUser;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Event\EntityLifecycleEventInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
class EasyAdminUserSubscriber implements EventSubscriberInterface
{
private UserPasswordEncoderInterface $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityUpdatedEvent::class => ['preUpdateEntity'],
BeforeEntityPersistedEvent::class => ['preUpdateEntity'],
];
}
public function preUpdateEntity(EntityLifecycleEventInterface $event): void
{
$entity = $event->getEntityInstance();
if ($entity instanceof AdminUser) {
$this->preUpdateAdminUser($entity);
}
}
private function preUpdateAdminUser(AdminUser &$user): void
{
$plainPassword = $user->getPassword();
if (!empty($plainPassword)) {
$newPassword = $this->passwordEncoder->encodePassword($user, $plainPassword);
$user->setPassword($newPassword);
}
}
}