<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
class MaintenanceSubscriber implements EventSubscriberInterface
{
/**
* @var
*/
private $maintenanceMode;
/**
* @var
*/
private $maintenanceAuthorizedIp;
/**
* @var
*/
private $twig;
/**
* MaintenanceListener constructor.
* @param $maintenanceMode
* @param $maintenanceAuthorizedIp
* @param $templating
*/
public function __construct(Environment $twig)
{
$this->maintenanceMode = $_ENV['MAINTENANCE_MODE'];
$this->maintenanceAuthorizedIp = [$_ENV['IP_AUTHORIZED']];
$this->twig = $twig;
}
/**
* @param RequestEvent $event
* @return void
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMainRequest()) {
// don't do anything if it's not the master request
return;
}
if ($this->maintenanceMode === 'false')
{
return;
}
if (in_array($event->getRequest()->getClientIp(), $this->maintenanceAuthorizedIp))
{
return;
}
$maintenanceView = $this->twig->render(
'maintenance/index.html.twig'
);
$response = new Response(
$maintenanceView,
Response::HTTP_OK,
array('content-type' => 'text/html')
);
$event->setResponse(new Response($response->getContent()));
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST=> [
['onKernelRequest',20]
],
];
}
}