<?php
namespace App\EventSubscriber;
use App\Entity\User;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class UserPasswordSubscriber implements EventSubscriberInterface
{
/**
* @var UserPasswordHasherInterface
*/
private $passwordHasher;
public function __construct(UserPasswordHasherInterface $passwordHasher)
{
$this->passwordHasher = $passwordHasher;
}
public static function getSubscribedEvents()
{
return [
BeforeEntityPersistedEvent::class => 'beforeEntityPersisted',
BeforeEntityUpdatedEvent::class => 'beforeEntityUpdated'
];
}
public function beforeEntityUpdated(BeforeEntityUpdatedEvent $event)
{
$this->setPassword($event);
}
public function beforeEntityPersisted(BeforeEntityPersistedEvent $event)
{
$this->setPassword($event);
}
private function setPassword($event)
{
/** @var User $user */
$user = $event->getEntityInstance();
if (!$user instanceof User) {
return ;
}
if ($user->getPlainPassword()) {
$user->setPassword($this->passwordHasher->hashPassword($user, $user->getPlainPassword()));
}
}
}