add(new CorsMiddleware()); // Add body parsing middleware $app->addBodyParsingMiddleware(); // Add routing middleware $app->addRoutingMiddleware(); // Add error middleware $errorMiddleware = $app->addErrorMiddleware(true, true, true); // Set custom error handler that includes CORS headers $errorHandler = $errorMiddleware->getDefaultErrorHandler(); $errorMiddleware->setDefaultErrorHandler(function ( ServerRequestInterface $request, \Throwable $exception, bool $displayErrorDetails, bool $logErrors, bool $logErrorDetails ) use ($errorHandler, $app): ResponseInterface { $response = $errorHandler($request, $exception, $displayErrorDetails, $logErrors, $logErrorDetails); // Add CORS headers to error response $corsMiddleware = new CorsMiddleware(); return $corsMiddleware->process($request, new class($response) implements \Psr\Http\Server\RequestHandlerInterface { private $response; public function __construct($response) { $this->response = $response; } public function handle(\Psr\Http\Message\ServerRequestInterface $request): \Psr\Http\Message\ResponseInterface { return $this->response; } }); }); return $app; } }