Доступ к текущему пользователю в обратном вызове жизненного цикла объекта - PullRequest
0 голосов
/ 25 апреля 2019

В моей сущности доктрины у меня есть обратный вызов жизненного цикла, которому нужен доступ к текущему вошедшему в систему пользователю (что-то вроде TokenStorage).

Могу ли я придерживаться обратного вызова жизненного цикла или мне нужно переключиться на прослушиватель событий, где вводится хранилище токена?

/** @ORM\HasLifecycleCallbacks() */
class Report {
    /** @ORM\PrePersist */
    public function onPrePersist(LifecycleEventArgs $args)
    {
        $this->updatedAt = new \DateTime();
        $this->lastUpdatedBy = ???->getToken()->getUser(); // <-----
    }
}

1 Ответ

1 голос
/ 25 апреля 2019

хороший способ сделать это - использовать обработчик событий доктрины:

файл service.yml

    services:
         my_report_listener :
          class : App\EventListener\ReportListner
          arguments: ['@security.token_storage']
          tags:
             - { name: doctrine.event_listener, event: prePersist }

класс слушателя вашего события:

    class ReportListner {

      private $tokenStorage;

      public function __construct(TokenStorageInterface $tokenStorage)
      {
         $this->tokenStorage= $tokenStorage;
      }

      public function prePersist(LifecycleEventArgs $args)
      {
        $entity = $args->getObject();
        if($entity instanceof Report){
         $current_user = $this->tokenStorage->getToken()->getUser();
        }
   }
}
...