addBodyParsingMiddleware(); $app->addRoutingMiddleware(); $app->addErrorMiddleware(true, true, true); // this strategy is preferable because we aren't using a lot of named placeholders $routeCollector = $app->getRouteCollector(); $routeCollector->setDefaultInvocationStrategy(new RequestResponseArgs()); $app->add(function (ServerRequestInterface $request, RequestHandlerInterface $handler) use ($app): ResponseInterface { if ($request->getMethod() === 'OPTIONS') { $response = $app->getResponseFactory()->createResponse(); } else { $response = $handler->handle($request); } $response = $response ->withHeader('Access-Control-Allow-Credentials', 'true') ->withHeader('Access-Control-Allow-Origin', '*') ->withHeader('Access-Control-Allow-Headers', '*') ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS') ->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') ->withHeader('Pragma', 'no-cache'); if (ob_get_contents()) { ob_clean(); } return $response; }); $app->get('/', [HomeFrontController::class, 'home']); $app->get('/tasks/{id}', [TaskController::class, 'getTask']); $app->delete('/tasks/{id}', [TaskController::class, 'delete']); $app->patch('/tasks/{id}', [TaskController::class, 'update']); $app->patch('/tasks/{id}/status/update', [TaskController::class, 'updateStatus']); $app->get('/tasks', [TaskController::class, 'getTasks']); $app->post('/tasks', [TaskController::class, 'addTask']); $app->run();