src/EventSubscriber/RedirectToSetPasswordSubscriber.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Provider;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\Routing\RouterInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. class RedirectToSetPasswordSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(private Security $security, private RouterInterface $router){}
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             KernelEvents::REQUEST => 'onKernelRequest',
  17.         ];
  18.     }
  19.     public function onKernelRequest(RequestEvent $event): void
  20.     {
  21.         $user$this->security->getUser();
  22.         if (!$user instanceof Provider) {
  23.             return;
  24.         }
  25.         $request $event->getRequest();
  26.         if (!$event->isMainRequest() ) {
  27.             return;
  28.         }
  29.         if ($request->get('_route') === 'provider-set-password') {
  30.             return;
  31.         }
  32.         if ($user->getPassword() !== null) {
  33.             return;
  34.         }
  35.         $event->setResponse(new RedirectResponse($this->router->generate('provider-set-password')));
  36.     }
  37. }