<?php
namespace App\EventSubscriber\PartnerApi;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelInterface;
class PartnerApiExceptionSubscriber implements EventSubscriberInterface
{
public function __construct(
private KernelInterface $kernel,
private string $partnerApiPath,
)
{
}
public function onKernelException(ExceptionEvent $event): void
{
if ($this->kernel->getEnvironment() === 'dev') {
return;
}
if (!str_starts_with($event->getRequest()->getPathInfo(), "/$this->partnerApiPath")) {
return;
}
$exception = $event->getThrowable();
$status = $exception instanceof HttpException ? $exception->getStatusCode() : Response::HTTP_INTERNAL_SERVER_ERROR;
$event->setResponse(new JsonResponse([
'status' => $status,
'message' => $exception->getMessage(),
], $status));
}
public static function getSubscribedEvents(): array
{
return [
'kernel.exception' => 'onKernelException',
];
}
}