<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 2019-04-19
* Time: 11:19
*/
namespace App\EventSubscriber;
use App\Http\DomainRedirectorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\EventListener\RouterListener;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Приоритет листнера редиректов должен быть выше, чем у RouterListener::onKernelRequest()
*
* @see RouterListener
*/
class DomainRedirectSubscriber implements EventSubscriberInterface
{
public function __construct(
protected DomainRedirectorInterface $domainRedirector
) {}
public function onRequest(RequestEvent $event): void
{
if (!$event->isMasterRequest()) {
return;
}
$request = $event->getRequest();
if (null !== $response = $this->domainRedirector->getImmediateResponse($request)) {
$event->setResponse($response);
}
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['onRequest', 50],
];
}
}