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));
     }
 }