respond = $respond; } public static function getSubscribedEvents() { return array(KernelEvents::EXCEPTION => 'onKernelException'); } public function onKernelException(ExceptionEvent $event): void { $exception = $event->getThrowable(); $env = $_SERVER['APP_ENV']; $class = get_class($exception); $code = $exception->getCode(); $file = $exception->getFile(); $line = $exception->getLine(); $message = $exception->getMessage(); $messageInfo1 = "Class : $class. Code : $code."; $messageInfo2 = "File : $file. Line : $line."; if ('prod' !== $env && 'production' !== $env) { $message .= " $messageInfo1 $messageInfo2"; } else { $message = $messageInfo1; } $body = new CommonResponseView($message); if ($exception instanceof MaestroException) { if(!$exception->showMoreInfo()){ $body = new CommonResponseView($exception->getMessage()); } $body->setKey($exception->getContextKey()); $body->setMethod($exception->getContextMethod()); } $this->setStatus($code); $response = $this->respond->createBodyObject($body)->respond(); $event->setResponse($response); // Will return the json response from service } private function setStatus(int $code): void { switch ($code) { case 401: $this->respond->statusUnauthorized(); break; case 403: $this->respond->statusForbidden(); break; case 404: $this->respond->statusNotFound(); break; case 422: $this->respond->statusUnprocessableEntity(); break; default: $this->respond->statusInternalServerError(); } } }