src/Service/Subscribers/UserSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Service\Subscribers;
  3. use App\Entity\User;
  4. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  8. class UserSubscriber implements EventSubscriberInterface
  9. {
  10.     private $passwordEncoder;
  11.     public function __construct(UserPasswordEncoderInterface $passwordEncoder)
  12.     {
  13.         $this->passwordEncoder $passwordEncoder;
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.             BeforeEntityPersistedEvent::class => ['setEncodePassword'],
  19.             BeforeEntityUpdatedEvent::class => ['updateEncodePassword'],
  20.         ];
  21.     }
  22.     public function setEncodePassword(BeforeEntityPersistedEvent $event): void
  23.     {
  24.         if ($event->getEntityInstance() instanceof User) {
  25.             $this->setUserPassword($event->getEntityInstance(), $event->getEntityInstance()->getPassword());
  26.         }
  27.     }
  28.     public function updateEncodePassword(BeforeEntityUpdatedEvent $event): void
  29.     {
  30.         if ($event->getEntityInstance() instanceof User) {
  31.             if ($event->getEntityInstance()->getNewPassword()) {
  32.                 $this->setUserPassword($event->getEntityInstance(), $event->getEntityInstance()->getNewPassword());
  33.             }
  34.         }
  35.     }
  36.     private function setUserPassword(User $userstring $password): void
  37.     {
  38.         $encodedPassword $this->passwordEncoder->encodePassword($user$password);
  39.         $user->setPassword($encodedPassword);
  40.     }
  41. }