src/Event/RoutingSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Event;
  3. use App\Repository\CompanyRepository;
  4. use App\Repository\PersonDegreeRepository;
  5. use App\Repository\SchoolRepository;
  6. use App\Repository\UserRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Symfony\Component\Routing\RouterInterface;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  15. final class RoutingSubscriber implements EventSubscriberInterface {
  16.     private TokenStorageInterface $tokenStorage;
  17.     private AuthorizationCheckerInterface $authorizationChecker;
  18.     private EntityManagerInterface $manager;
  19.     private RequestStack $requestStack;
  20.     private RouterInterface $router;
  21.     private PersonDegreeRepository $personDegreeRepository;
  22.     private SchoolRepository $schoolRepository;
  23.     private CompanyRepository $companyRepository;
  24.     private UserRepository $userRepository;
  25.     public function __construct(
  26.         TokenStorageInterface  $tokenStorage,
  27.         AuthorizationCheckerInterface   $authorizationChecker,
  28.         EntityManagerInterface $manager,
  29.         RequestStack           $requestStack,
  30.         RouterInterface        $router,
  31.         PersonDegreeRepository $personDegreeRepository,
  32.         SchoolRepository $schoolRepository,
  33.         CompanyRepository $companyRepository,
  34.         UserRepository $userRepository
  35.     ) {
  36.         $this->tokenStorage $tokenStorage;
  37.         $this->authorizationChecker $authorizationChecker;
  38.         $this->manager $manager;
  39.         $this->router $router;
  40.         $this->requestStack $requestStack;
  41.         $this->personDegreeRepository $personDegreeRepository;
  42.         $this->schoolRepository $schoolRepository;
  43.         $this->companyRepository $companyRepository;
  44.         $this->userRepository $userRepository;
  45.     }
  46.     public function onKernelLoginRequest(RequestEvent $event) {
  47.         $route $event->getRequest()->attributes->get('_route');
  48.         $request $event->getRequest()->request;
  49.         if ($route === 'login' && $event->getRequest()->getMethod() === 'POST') {
  50.             $phone $request->get('_username');
  51.             $user $this->userRepository->findOneBy(['phone' => $phone]);
  52.             if ($user) {
  53.                 $username $user->getUsername();
  54.             } else {
  55.                 $username = ($this->userRepository->findOneBy(['username' => $phone])) ? ' ' $phone;
  56.             }
  57.             $request->set('_username'$username);
  58.         }
  59.     }
  60.     public static function getSubscribedEvents(): array {
  61.         return [
  62.             KernelEvents::REQUEST => [
  63.                 ['onKernelLoginRequest'10],
  64.             ]
  65.         ];
  66.     }
  67. }