Service needs to look like this
services:
user.listener:
class: AppBundle\EventListener\UserListener
arguments: [ "@security.password_encoder" ]
tags: [ { name: doctrine.event_listener, event: prePersist } ]
Listener should look like that
// AppBundle\EventListener\UserListener.php
namespace AppBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use AppBundle\Entity\User;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class UserListener
{
protected $container;
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$encodedPassword = $this->encoder->encodePassword($entity, $entity->getPassword());
$entity->setPassword($encodedPassword);
}
}