aiblog/app/Http/Middleware/FormatApiResponse.php
2024-11-17 11:30:01 +08:00

48 lines
No EOL
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class FormatApiResponse
{
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
if ($response instanceof JsonResponse && !$this->isSwaggerRequest($request)) {
$data = $response->getData(true);
$formatted = [
'success' => $response->getStatusCode() < 400,
'message' => $data['message'] ?? ($response->getStatusCode() < 400 ? 'Success' : 'Error'),
];
if (isset($data['data'])) {
$formatted['data'] = $data['data'];
}
if (isset($data['errors'])) {
$formatted['errors'] = $data['errors'];
}
if (isset($data['pagination'])) {
$formatted['pagination'] = $data['pagination'];
}
$response->setData($formatted);
}
return $response;
}
private function isSwaggerRequest(Request $request): bool
{
return str_starts_with($request->path(), 'api/documentation');
}
}