src/EventSubscriber/ResolveMeSubscriber.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\Device;
  5. use App\Entity\User;
  6. use App\Repository\DeviceRepository;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Security\Core\Security;
  11. class ResolveMeSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var Security
  15.      */
  16.     private $security;
  17.     /**
  18.      * @var DeviceRepository
  19.      */
  20.     private $deviceRepository;
  21.     /**
  22.      * ResolveMeSubscriber constructor.
  23.      * @param Security $security
  24.      * @param DeviceRepository $deviceRepository
  25.      */
  26.     public function __construct(Security $securityDeviceRepository $deviceRepository)
  27.     {
  28.         $this->security $security;
  29.         $this->deviceRepository $deviceRepository;
  30.     }
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             KernelEvents::REQUEST => ['resolveMe'EventPriorities::PRE_READ],
  35.         ];
  36.     }
  37.     public function resolveMe(RequestEvent $event)
  38.     {
  39.         $request $event->getRequest();
  40.         $user $this->security->getUser();
  41.         if($request->headers->has('Device') && $user) {
  42.             $device $this->deviceRepository->findOneBy(['uuid' => $request->headers->get('Device')]);
  43.             $user->setCurrentDevice($device);
  44.         }
  45.         if ('api_users_get_item' !== $request->attributes->get('_route')) {
  46.             return;
  47.         }
  48.         if ('me' !== $request->attributes->get('id')) {
  49.             return;
  50.         }
  51.         if (!$user instanceof User) {
  52.             return;
  53.         }
  54.         $request->attributes->set('id'$user->getId());
  55.     }
  56. }