From 2d3a1074f6766bc2faefd6770824cecb5ef582d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Tue, 6 Apr 2021 21:21:47 +0200 Subject: [PATCH] Die Error-Middleware wurde in eine Klasse verpackt. --- api/html/index.php | 39 +------------- api/src/Middleware/ErrorHandler.php | 83 +++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 37 deletions(-) create mode 100644 api/src/Middleware/ErrorHandler.php diff --git a/api/html/index.php b/api/html/index.php index c9e6a2f..f5df465 100644 --- a/api/html/index.php +++ b/api/html/index.php @@ -5,12 +5,10 @@ $dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__)); $dotenv->load(); use DI\Container; -use Psr\Http\Message\ServerRequestInterface; -use Psr\Log\LoggerInterface; -use Slim\Exception\HttpException; use Slim\Factory\AppFactory; use Slim\Routing\RouteCollectorProxy; use TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursController; +use TorstenHettstedt\TimekeepingApi\Middleware\ErrorHandler; use TorstenHettstedt\TimekeepingApi\Middleware\JsonBodyParserMiddleware; $container = new Container(); @@ -53,40 +51,7 @@ $app->group('/working-hours', function (RouteCollectorProxy $group) { }); }); - -// Define Custom Error Handler -$customErrorHandler = function ( - ServerRequestInterface $request, - Throwable $exception, - bool $displayErrorDetails, - bool $logErrors, - bool $logErrorDetails, - ?LoggerInterface $logger = null -) use ($app) { - if ($logger !== null && $logErrors === true) { - $logger->error($exception->getMessage()); - } - $payload = [ - 'timestamp' => date('Y-m-d\TH:m:sP'), - 'status' => $exception->getCode(), - "error" => '', - 'message' => $exception->getMessage(), - 'path' => $exception->getFile() - ]; - - if ($exception instanceof HttpException) { - $payload['error'] = $exception->getTitle(); - } - - $response = $app->getResponseFactory()->createResponse($exception->getCode()); - $response->getBody()->write( - json_encode($payload, JSON_UNESCAPED_UNICODE) - ); - - return $response; -}; - $errorMiddleware = $app->addErrorMiddleware(true, true, true); -$errorMiddleware->setDefaultErrorHandler($customErrorHandler); +$errorMiddleware->setDefaultErrorHandler(new ErrorHandler($app)); $app->run(); \ No newline at end of file diff --git a/api/src/Middleware/ErrorHandler.php b/api/src/Middleware/ErrorHandler.php new file mode 100644 index 0000000..709ab8a --- /dev/null +++ b/api/src/Middleware/ErrorHandler.php @@ -0,0 +1,83 @@ +app = $app; + } + + /** + * @param Throwable $exception + * + * @return mixed[] + */ + protected function buildJsonArray(Throwable $exception): array + { + $payload = [ + 'timestamp' => date('Y-m-d\TH:m:sP'), + 'status' => $exception->getCode(), + "error" => '', + 'message' => $exception->getMessage(), + 'path' => $exception->getFile() + ]; + + if ($exception instanceof HttpException) { + $payload['error'] = $exception->getTitle(); + } + + return $payload; + } + + /** + * @param ServerRequestInterface $request + * @param Throwable $exception + * @param bool $displayErrorDetails + * @param bool $logErrors + * @param bool $logErrorDetails + * @param LoggerInterface|null $logger + * + * @return ResponseInterface + */ + public function __invoke( + ServerRequestInterface $request, + Throwable $exception, + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails, + ?LoggerInterface $logger = null + ): ResponseInterface + { + if ($logger !== null && $logErrors === true) { + $logger->error($exception->getMessage()); + } + + $payload = $this->buildJsonArray($exception); + + $response = $this->app->getResponseFactory()->createResponse($exception->getCode()); + $response->getBody()->write( + json_encode($payload, JSON_UNESCAPED_UNICODE) + ); + + return $response; + } + +} \ No newline at end of file