fix: Pastikan CORS headers ditambahkan ke error response juga, tambah DEPLOY_CORS_FIX.md

This commit is contained in:
mwpn
2025-12-17 14:10:33 +07:00
parent 8b81de7fa6
commit 359def592d
3 changed files with 151 additions and 4 deletions

View File

@@ -5,9 +5,12 @@ 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
{
@@ -20,9 +23,6 @@ class AppBootstrap
{
$app = AppFactory::create();
// Add CORS middleware FIRST (before routing)
$app->add(new CorsMiddleware());
// Add body parsing middleware
$app->addBodyParsingMiddleware();
@@ -30,7 +30,35 @@ class AppBootstrap
$app->addRoutingMiddleware();
// Add error middleware
$app->addErrorMiddleware(true, true, true);
$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;
}