src/EventSubscriber/Under_maintenance/UnderMaintenanceApiSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber\Under_maintenance;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. class UnderMaintenanceApiSubscriber implements EventSubscriberInterface
  9. {
  10.     private const TEST_CODE_HEADER 'under-maintenance-test-code';
  11.     public function __construct(
  12.         private bool $isUnderMaintenance,
  13.         private string $apiRoutePrefix,
  14.         private string $underMaintenanceTestCode,
  15.     ) {
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             RequestEvent::class => ['onKernelRequest'1],
  21.         ];
  22.     }
  23.     public function onKernelRequest(RequestEvent $event): void
  24.     {
  25.         if (false === $event->isMainRequest()) {
  26.             return;
  27.         }
  28.         if (false === $this->isUnderMaintenance) {
  29.             return;
  30.         }
  31.         if (false === str_starts_with($event->getRequest()->getPathInfo(), $this->apiRoutePrefix)) {
  32.             return;
  33.         }
  34.         $underMaintenanceTestCode $event->getRequest()->headers->get(self::TEST_CODE_HEADER);
  35.         if ($this->underMaintenanceTestCode === $underMaintenanceTestCode) {
  36.             return;
  37.         }
  38.         $event->setResponse(
  39.             new JsonResponse(
  40.                 'Le système est actuellement en maintenance. Veuillez réessayer sous peu.',
  41.                 Response::HTTP_SERVICE_UNAVAILABLE
  42.             )
  43.         );
  44.     }
  45. }