J'ai enregistré le listener suivant comme un service. Il enregistre l'utilisateur connecté. Cela fonctionne parfaitement. Après avoir sauvegardé l'entité, l'ID utilisateur est dans createdBy et updatedBy. Ok un petit problème : La commande "php app / console doctrine : fixtures : load" lance l'erreur "Call to a member function getUser () on a non-object. C'est un peu compréhensible. Seulement maintenant je dois désactiver à chaque fois le service avant ? Avez-vous une autre solution ?
class UserListener implements EventSubscriber
{
protected $container;
public function \_\_construct(ContainerInterface $container)
{
$this->container = $container;
}
public function getSubscribedEvents()
{
return array(
Events::prePersist,
Events::preUpdate
);
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof Post) {
$user = $this->container->get('security.context')->getToken()->getUser();
if (!is\_object($user) || !$user instanceof User) {
throw new AccessDeniedException();
}
$entity->setCreatedBy($user);
$entity->setUpdatedBy($user);
}
}
/\*\*
\* @param PreUpdateEventArgs $args
\*/
public function preUpdate(PreUpdateEventArgs $args)
{
$entity = $args->getEntity();
$em = $args->getEntityManager();
if ($entity instanceof Post) {
$user = $this->container->get('security.context')->getToken()->getUser();
if (!is\_object($user) || !$user instanceof User) {
throw new AccessDeniedException();
}
$entity->setUpdatedBy($user);
$uow = $em->getUnitOfWork();
$meta = $em->getClassMetadata(get\_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
}
}
}