<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Routing\RouterInterface;
use App\Controller\Applicant\UserInfoController;
/**
*
* @author "wendell.zheng <wxzheng@ustc.edu.cn>"
*/
class UserInfoSubscriber implements EventSubscriberInterface
{
protected $router;
protected $security;
protected $session;
public function __construct(RouterInterface $router, Security $security, SessionInterface $session)
{
$this->router = $router;
$this->security = $security;
$this->session = $session;
}
public function onKernelController(ControllerEvent $event)
{
$controller = $event->getController();
if (is_array($controller)) {
$controller = $controller[0];
}
if ($controller instanceof UserInfoController) {
$user = $this->security->getUser();
$userInfo = $user->getUserInfo();
if (! $userInfo) {
$this->session->getFlashBag()->add('notice', '请先完善个人信息');
$event->setController(function () {
return new RedirectResponse($this->router->generate('applicant_user_info'));
});
}
}
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController'
];
}
}