api-erstellen #1
+2
-37
@@ -5,12 +5,10 @@ $dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
|
|||||||
$dotenv->load();
|
$dotenv->load();
|
||||||
|
|
||||||
use DI\Container;
|
use DI\Container;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
use Slim\Exception\HttpException;
|
|
||||||
use Slim\Factory\AppFactory;
|
use Slim\Factory\AppFactory;
|
||||||
use Slim\Routing\RouteCollectorProxy;
|
use Slim\Routing\RouteCollectorProxy;
|
||||||
use TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursController;
|
use TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursController;
|
||||||
|
use TorstenHettstedt\TimekeepingApi\Middleware\ErrorHandler;
|
||||||
use TorstenHettstedt\TimekeepingApi\Middleware\JsonBodyParserMiddleware;
|
use TorstenHettstedt\TimekeepingApi\Middleware\JsonBodyParserMiddleware;
|
||||||
|
|
||||||
$container = new Container();
|
$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 = $app->addErrorMiddleware(true, true, true);
|
||||||
$errorMiddleware->setDefaultErrorHandler($customErrorHandler);
|
$errorMiddleware->setDefaultErrorHandler(new ErrorHandler($app));
|
||||||
|
|
||||||
$app->run();
|
$app->run();
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace TorstenHettstedt\TimekeepingApi\Middleware;
|
||||||
|
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Slim\App;
|
||||||
|
use Slim\Exception\HttpException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class ErrorHandler
|
||||||
|
{
|
||||||
|
protected App $app;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ErrorHandler constructor.
|
||||||
|
*
|
||||||
|
* @param App $app
|
||||||
|
*/
|
||||||
|
public function __construct(App $app)
|
||||||
|
{
|
||||||
|
$this->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user