src/EventSubscriber/UserInfoSubscriber.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\KernelEvents;
  5. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use App\Controller\Applicant\UserInfoController;
  11. /**
  12.  *
  13.  * @author "wendell.zheng <wxzheng@ustc.edu.cn>"
  14.  */
  15. class UserInfoSubscriber implements EventSubscriberInterface
  16. {
  17.     protected $router;
  18.     protected $security;
  19.     protected $session;
  20.     public function __construct(RouterInterface $routerSecurity $securitySessionInterface $session)
  21.     {
  22.         $this->router $router;
  23.         $this->security $security;
  24.         $this->session $session;
  25.     }
  26.     public function onKernelController(ControllerEvent $event)
  27.     {
  28.         $controller $event->getController();
  29.         if (is_array($controller)) {
  30.             $controller $controller[0];
  31.         }
  32.         if ($controller instanceof UserInfoController) {
  33.             $user $this->security->getUser();
  34.             $userInfo $user->getUserInfo();
  35.             if (! $userInfo) {
  36.                 $this->session->getFlashBag()->add('notice''请先完善个人信息');
  37.                 $event->setController(function () {
  38.                     return new RedirectResponse($this->router->generate('applicant_user_info'));
  39.                 });
  40.             }
  41.         }
  42.     }
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             KernelEvents::CONTROLLER => 'onKernelController'
  47.         ];
  48.     }
  49. }