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\JsonBodyParserMiddleware; $container = new Container(); $container->set('databases', function () { $dsn = "pgsql:host=${_ENV['DATABASES_HOST']};port=5432;dbname=${_ENV['DATABASES_NAME']}"; return new PDO($dsn, $_ENV['DATABASES_USER'], $_ENV['DATABASES_PASS']); }); AppFactory::setContainer($container); $app = AppFactory::create(); $app->add(new JsonBodyParserMiddleware()); $app->get( '/', 'TorstenHettstedt\TimekeepingApi\Controller\HelloWorldController:read' ); $app->get( '/views/working-hours/weekly', 'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseWeekly' ); $app->get( '/views/working-hours/monthly', 'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseMonthly' ); $app->get( '/views/working-hours/yearly', 'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseYearly' ); $app->group('/working-hours', function (RouteCollectorProxy $group) { $group->get('', WorkingHoursController::class . ':browse'); $group->post('', WorkingHoursController::class . ':creat'); $group->group('/{id:\d\d\d\d-\d\d-\d\d}', function (RouteCollectorProxy $group) { $group->get('', WorkingHoursController::class . ':read'); $group->put('', WorkingHoursController::class . ':update'); }); }); // 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); $app->run();