Метод wantsJson
Метод wantsJson класса Request позволяет определить, ожидает ли клиентский запрос JSON-ответ. Проверка выполняется на основе заголовка Accept, который браузер или API-клиент отправляют вместе с запросом. Метод возвращает true, если заголовок содержит указание на JSON-формат, и false в противном случае.
Этот метод особенно полезен при создании API, которые должны обрабатывать как веб-запросы (HTML), так и AJAX/JSON-запросы, возвращая соответствующий ответ. В отличие от метода expectsJson, который учитывает также другие факторы (например, наличие параметров запроса), wantsJson основывается исключительно на анализе заголовка Accept.
Синтаксис
<?php
$request->wantsJson();
?>
Метод не принимает параметров и возвращает значение типа bool.
Пример
Проверим, ожидает ли клиент JSON-ответ в методе контроллера:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
class UserController extends Controller
{
public function index(Request $request)
{
if ($request->wantsJson()) {
$users = User::all();
return response()->json([
'status' => 'success',
'data' => $users
]);
}
$users = User::paginate(10);
return view('users.index', ['users' => $users]);
}
}
?>
Пример
Используем метод для обработки как обычных, так и JSON-запросов в одном маршруте:
<?php
use IlluminateSupportFacadesRoute;
use AppHttpControllersProductController;
Route::get('/products', function (Request $request) {
if ($request->wantsJson()) {
$products = Product::with('category')->get();
return response()->json($products);
}
return view('products.index');
});
?>
Пример
Комбинируем метод с другими методами проверки для более точного определения типа запроса:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ApiController extends Controller
{
public function handle(Request $request)
{
$isJson = $request->wantsJson();
$isAjax = $request->ajax();
if ($isJson && $isAjax) {
return response()->json([
'message' => 'JSON request from AJAX'
]);
}
if ($isJson) {
return response()->json([
'message' => 'JSON request'
]);
}
return view('handle');
}
}
?>
Пример
Применяем метод в middleware для автоматического определения типа ответа:
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
class JsonMiddleware
{
public function handle(Request $request, Closure $next)
{
if ($request->wantsJson()) {
$request->headers->set('Accept', 'application/json');
}
return $next($request);
}
}
?>
Результат работы middleware при JSON-запросе:
"Headers updated: Accept: application/json"
Смотрите также
-
метод
expectsJson,
который выполняет комплексную проверку ожидания JSON -
метод
ajax,
который определяет AJAX-запрос -
метод
json,
который возвращает JSON-ответ -
метод
header,
который получает значение заголовка запроса