Files
api-btekno/src/Bootstrap/app.php

67 lines
2.1 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace App\Bootstrap;
use App\Middleware\CorsMiddleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\App;
use Slim\Factory\AppFactory;
use Slim\Middleware\BodyParsingMiddleware;
use Slim\Middleware\ErrorMiddleware;
class AppBootstrap
{
/**
* Create and configure Slim App instance
*
* @return App
*/
public static function create(): App
{
$app = AppFactory::create();
// 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;
}
});
});
// Add CORS middleware LAST (after error middleware)
// This ensures CORS headers are added to all responses, including errors
$app->add(new CorsMiddleware());
return $app;
}
}