From b6da80f550cd8a01c168fe778619c900825a8112 Mon Sep 17 00:00:00 2001 From: Christoph Kappestein <christoph.kappestein@gmail.com> Date: Mon, 30 Dec 2024 14:33:46 +0100 Subject: [PATCH] always use exception listener --- config/services.php | 3 +- .../ExceptionResponseListener.php | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/config/services.php b/config/services.php index 58fd84b..cc64fd1 100644 --- a/config/services.php +++ b/config/services.php @@ -105,7 +105,8 @@ $services->set(PushCommand::class); $services->set(ControllerArgumentsListener::class); - $services->set(ExceptionResponseListener::class); + $services->set(ExceptionResponseListener::class) + ->arg('$debug', param('kernel.debug')); $services->set(SerializeResponseListener::class); }; diff --git a/src/EventListener/ExceptionResponseListener.php b/src/EventListener/ExceptionResponseListener.php index 901461c..e83c702 100644 --- a/src/EventListener/ExceptionResponseListener.php +++ b/src/EventListener/ExceptionResponseListener.php @@ -39,21 +39,31 @@ #[AsEventListener(event: KernelEvents::EXCEPTION, method: 'onKernelException')] final class ExceptionResponseListener { + public function __construct(private bool $debug) + { + } + public function onKernelException(ExceptionEvent $event): void { + $headers = []; $exception = $event->getThrowable(); if ($exception instanceof StatusCodeException) { - $title = get_class($exception); - $message = $exception->getMessage() . ' in ' . $exception->getFile() . ' on line ' . $exception->getLine(); - $trace = $exception->getTraceAsString(); + $status = $exception->getStatusCode(); + } else { + $status = 500; + } - $error = new Error(); - $error->setSuccess(false); - $error->setTitle($title); - $error->setMessage($message); - $error->setTrace($trace); + $title = get_class($exception); + $message = $exception->getMessage() . ' in ' . $exception->getFile() . ' on line ' . $exception->getLine(); - $event->setResponse(new JsonResponse($error, $exception->getStatusCode())); + $error = new Error(); + $error->setSuccess(false); + $error->setTitle($title); + $error->setMessage($message); + if ($this->debug) { + $error->setTrace($exception->getTraceAsString()); } + + $event->setResponse(new JsonResponse($error, $status, $headers)); } }