Framework/src/Http/Middleware/ContentNegotiationMiddleware.php

30 lines
975 B
PHP
Raw Normal View History

2025-12-14 23:10:01 +00:00
<?php
declare(strict_types=1);
namespace Phred\Http\Middleware;
use Phred\Support\Config;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class ContentNegotiationMiddleware implements MiddlewareInterface
{
public const ATTR_API_FORMAT = 'phred.api_format'; // 'rest' | 'jsonapi'
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$format = strtolower(Config::get('API_FORMAT', Config::get('api.format', 'rest')));
// Optional: allow Accept header to override when JSON:API is explicitly requested
$accept = $request->getHeaderLine('Accept');
if (str_contains($accept, 'application/vnd.api+json')) {
$format = 'jsonapi';
}
return $handler->handle($request->withAttribute(self::ATTR_API_FORMAT, $format));
}
}