src/Log/Service/LogFactory.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Log\Service;
  3. use App\Log\Entity\Log;
  4. use App\Log\Entity\Request;
  5. use App\Log\EventSubscriber\RequestSubscriber;
  6. use App\Security\Entity\User;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. class LogFactory {
  11.     /**
  12.      * @var EntityManagerInterface
  13.      */
  14.     protected EntityManagerInterface $entityManager;
  15.     /**
  16.      * @var RequestStack
  17.      */
  18.     protected RequestStack $requestStack;
  19.     /**
  20.      * @var TokenStorageInterface
  21.      */
  22.     protected TokenStorageInterface $tokenStorage;
  23.     public function __construct(EntityManagerInterface $logEntityManager,
  24.                                 RequestStack           $requestStack,
  25.                                 TokenStorageInterface  $tokenStorage)
  26.     {
  27.         $this->entityManager $logEntityManager;
  28.         $this->requestStack $requestStack;
  29.         $this->tokenStorage $tokenStorage;
  30.     }
  31.     /**
  32.      * Creates new log for current request
  33.      * @param int $severity
  34.      * @param string $subject
  35.      * @param array $data
  36.      * @param string $type
  37.      * @param Request|null $requestEntity
  38.      */
  39.     public function log(int $severitystring $subject, array $datastring $type Log::TYPE_COMMONRequest $requestEntity null): void
  40.     {
  41.         $log = (new Log())->setSeverity($severity)
  42.             ->setData($data)
  43.             ->setSubject($subject)
  44.             ->setType($type);
  45.         $user $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
  46.         if ($user instanceof User && $this->tokenStorage->getToken()){
  47.             $log->setUser($this->entityManager->getRepository(User::class)->find($user->getId()));
  48.         }
  49.         if(!$requestEntity && $request $this->requestStack->getMainRequest()) {
  50.             $requestEntity $request->attributes->get(RequestSubscriber::ID_KEY);
  51.         }
  52.         if($requestEntity) {
  53.             $log->setRequest($requestEntity);
  54.         }
  55.         $this->entityManager->persist($log);
  56.         $this->entityManager->flush();
  57.     }
  58. }