src/EventSubscriber/MaintenanceSubscriber.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Twig\Environment;
  8. use Twig\Error\LoaderError;
  9. use Twig\Error\RuntimeError;
  10. use Twig\Error\SyntaxError;
  11. class MaintenanceSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var
  15.      */
  16.     private $maintenanceMode;
  17.     /**
  18.      * @var
  19.      */
  20.     private $maintenanceAuthorizedIp;
  21.     /**
  22.      * @var
  23.      */
  24.     private $twig;
  25.     /**
  26.      * MaintenanceListener constructor.
  27.      * @param $maintenanceMode
  28.      * @param $maintenanceAuthorizedIp
  29.      * @param $templating
  30.      */
  31.     public function __construct(Environment $twig)
  32.     {
  33.         $this->maintenanceMode $_ENV['MAINTENANCE_MODE'];
  34.         $this->maintenanceAuthorizedIp = [$_ENV['IP_AUTHORIZED']];
  35.         $this->twig $twig;
  36.     }
  37.     /**
  38.      * @param RequestEvent $event
  39.      * @return void
  40.      * @throws LoaderError
  41.      * @throws RuntimeError
  42.      * @throws SyntaxError
  43.      */
  44.     public function onKernelRequest(RequestEvent $event)
  45.     {
  46.         if (!$event->isMainRequest()) {
  47.             // don't do anything if it's not the master request
  48.             return;
  49.         }
  50.         if ($this->maintenanceMode === 'false')
  51.         {
  52.             return;
  53.         }
  54.         if (in_array($event->getRequest()->getClientIp(), $this->maintenanceAuthorizedIp))
  55.         {
  56.             return;
  57.         }
  58.         $maintenanceView $this->twig->render(
  59.             'maintenance/index.html.twig'
  60.         );
  61.         $response = new Response(
  62.             $maintenanceView,
  63.             Response::HTTP_OK,
  64.             array('content-type' => 'text/html')
  65.         );
  66.         $event->setResponse(new Response($response->getContent()));
  67.     }
  68.     public static function getSubscribedEvents()
  69.     {
  70.         return [
  71.             KernelEvents::REQUEST=> [
  72.                 ['onKernelRequest',20]
  73.             ],
  74.         ];
  75.     }
  76. }