<?php
namespace App\EventSubscriber;
use App\Controller\MaintenanceController;
use MLDev\BaseBundle\Controller\FrontController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class MaintenanceSubscriber implements EventSubscriberInterface
{
/**
* @var ControllerResolverInterface
*/
private $resolver;
/**
* @var bool
*/
private $maintenance;
public function __construct(ControllerResolverInterface $resolver, bool $maintenance)
{
$this->resolver = $resolver;
$this->maintenance = $maintenance;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => ['onKernelController', 0],
];
}
public function onKernelController(ControllerEvent $event)
{
if (!$this->maintenance) {
return;
}
if (!$event->isMainRequest()) {
return;
}
list($controller) = $event->getController();
if ($controller instanceof FrontController) {
$request = $event->getRequest();
$request->attributes->add([
'_controller' => [MaintenanceController::class, 'index'],
]);
$event->setController(
$this->resolver->getController($request)
);
}
}
}