src/EventSubscriber/EasyAdminSubscriber.php line 41

  1. <?php /** @noinspection ALL */
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  6. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  7. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  8. class EasyAdminSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
  9. {
  10.     private $entityManager;
  11.     private $passwordEncoder;
  12.     public function __construct(EntityManagerInterface $entityManagerUserPasswordHasherInterface $passwordEncoder)
  13.     {
  14.         $this->entityManager $entityManager;
  15.         $this->passwordEncoder $passwordEncoder;
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             BeforeEntityPersistedEvent::class => ['addUser'],
  21.             BeforeEntityUpdatedEvent::class => ['updateUser'], //surtout utile lors d'un reset de mot passe plutôt qu'un réel update, car l'update va de nouveau encrypter le mot de passe DEJA encrypté ...
  22.         ];
  23.     }
  24.     public function updateUser(BeforeEntityUpdatedEvent $event): void
  25.     {
  26.         $entity $event->getEntityInstance();
  27.         if (!($entity instanceof User)) {
  28.             return;
  29.         }
  30.         $this->setPassword($entity);
  31.     }
  32.     public function addUser(BeforeEntityPersistedEvent $event): void
  33.     {
  34.         $entity $event->getEntityInstance();
  35.         if (!($entity instanceof User)) {
  36.             return;
  37.         }
  38.         $this->setPassword($entity);
  39.     }
  40.     /**
  41.      * @param User $entity
  42.      */
  43.     public function setPassword(User $entity): void
  44.     {
  45.         $pass $entity->getPlainPassword();
  46.         $entity->setPassword(
  47.             $this->passwordEncoder->hashPassword(
  48.                 $entity,
  49.                 $pass
  50.             )
  51.         );
  52.         $this->entityManager->persist($entity);
  53.         $this->entityManager->flush();
  54.     }
  55. }