src/EventSubscriber/KernelRequestSubscriber.php line 47

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Entity\Setting;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Twig\Environment as TwigEnvironment;
  11. use Twig\Error\LoaderError;
  12. use Twig\Error\RuntimeError;
  13. use Twig\Error\SyntaxError;
  14. class KernelRequestSubscriber implements EventSubscriberInterface
  15. {
  16.     private $twig;
  17.     private $em;
  18.     public function __construct(TwigEnvironment $twigEntityManagerInterface $em)
  19.     {
  20.         $this->twig $twig;
  21.         $this->em $em;
  22.     }
  23.     /**
  24.      * {@inheritdoc}
  25.      */
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             KernelEvents::REQUEST => [
  30.                 ['onMaintenance'\PHP_INT_MAX 1000],
  31.             ],
  32.         ];
  33.     }
  34.     /**
  35.      * @throws SyntaxError
  36.      * @throws RuntimeError
  37.      * @throws LoaderError
  38.      */
  39.     public function onMaintenance(RequestEvent $event): Void
  40.     {
  41.         $isMaintenance $this->em->getRepository(Setting::class)->findOneBy(['name' => 'maintenance_mode''type' => 'global']);
  42.         if ($isMaintenance !== null and $isMaintenance->getValue() == '0') {
  43.             $isMaintenance false;
  44.         }
  45.         else {
  46.             $isMaintenance true;
  47.         }
  48.         $isCli \PHP_SAPI === 'cli';
  49.         if ($isMaintenance && !$isCli) {
  50.             $event->setResponse(new Response(
  51.                 $this->twig->render('maintenance.html.twig'),
  52.                 Response::HTTP_SERVICE_UNAVAILABLE,
  53.             ));
  54.             $event->stopPropagation();
  55.         }
  56.     }
  57. }