<?php declare(strict_types=1);
namespace App\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class LoginReturnSubscriber implements EventSubscriberInterface
{
use TargetPathTrait;
private RequestStack $requestStack;
private TokenStorageInterface $tokenStorage;
public function __construct(RequestStack $requestStack, TokenStorageInterface $tokenStorage)
{
$this->requestStack = $requestStack;
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$route = $request->attributes->get('_route');
if (
!in_array($route, ['proposal_details', 'proposal_list'], true)
|| !$event->isMainRequest()
|| $request->isXmlHttpRequest()
) {
return;
}
if (null === $this->tokenStorage->getToken()) {
return;
}
if (is_object($this->tokenStorage->getToken()->getUser())) {
return;
}
$this->saveTargetPath($this->requestStack->getSession(), 'main', $request->getUri());
}
/**
* @return array<string, array<int|string, array<int|string, int|string>|int|string>|string>
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest'],
];
}
}