<?php
declare(strict_types=1);
namespace App\EventSubscriber\Under_maintenance;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class UnderMaintenanceApiSubscriber implements EventSubscriberInterface
{
public function __construct(
private bool $isUnderMaintenance,
private string $apiRoutePrefix,
) {
}
public static function getSubscribedEvents(): array
{
return [
RequestEvent::class => ['onKernelRequest', 1],
];
}
public function onKernelRequest(RequestEvent $event): void
{
if (false === $event->isMainRequest()) {
return;
}
if (false === $this->isUnderMaintenance) {
return;
}
if (false === str_starts_with($event->getRequest()->getPathInfo(), $this->apiRoutePrefix)) {
return;
}
$event->setResponse(
new JsonResponse(
'Le système est actuellement en maintenance. Veuillez réessayer sous peu.',
Response::HTTP_SERVICE_UNAVAILABLE
)
);
}
}