proofdb/vendor/illuminate/http/Middleware/PrefersJsonResponses.php
2026-05-01 23:40:14 +08:00

66 lines
1.5 KiB
PHP

<?php
namespace Illuminate\Http\Middleware;
use Closure;
class PrefersJsonResponses
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$accept = $request->headers->get('Accept');
if ($this->acceptHeaderIsBroad($accept)) {
if ($accept !== null) {
$request->headers->set('X-Original-Accept', $accept);
}
$request->headers->set('Accept', 'application/json');
}
return $next($request);
}
/**
* Determine if the given "Accept" header value is broad enough to be treated as JSON.
*
* The header is broad when it's missing or every media-type listed is wildcard ("*\/*" or "application/*").
*
* @param string|null $accept
* @return bool
*/
protected function acceptHeaderIsBroad($accept)
{
if ($accept === null || trim($accept) === '') {
return true;
}
foreach (explode(',', $accept) as $value) {
$value = strtolower(trim($value));
if ($value === '') {
continue;
}
$pos = strpos($value, ';');
if ($pos !== false) {
$value = trim(substr($value, 0, $pos));
}
if (! in_array($value, ['*/*', 'application/*'], true)) {
return false;
}
}
return true;
}
}