РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
704 of 1392 menu

Метод shouldRenderJsonWhen

Метод shouldRenderJsonWhen применяется к объекту исключения и возвращает логическое значение (true или false), указывающее, должен ли ответ на данное исключение быть отрендерен в формате JSON. Этот метод полезен при создании API, когда необходимо гибко управлять форматом ответа в зависимости от типа исключения или контекста запроса.

Синтаксис

<?php $exception->shouldRenderJsonWhen($request); ?>

Метод принимает один параметр - объект запроса (Request). По умолчанию метод возвращает true, если запрос ожидает JSON-ответ (например, через заголовок Accept: application/json или если это API-запрос). Однако вы можете переопределить это поведение в собственном классе исключения.

Пример

Давайте создадим собственное исключение, которое всегда возвращает JSON-ответ, независимо от заголовков запроса:

<?php namespace AppExceptions; use Exception; use IlluminateHttpRequest; class ApiException extends Exception { public function shouldRenderJsonWhen(Request $request): bool { return true; } } ?>

Результат выполнения кода:

true

Пример

Теперь создадим исключение, которое возвращает JSON-ответ только для запросов с определённым заголовком:

<?php namespace AppExceptions; use Exception; use IlluminateHttpRequest; class CustomException extends Exception { public function shouldRenderJsonWhen(Request $request): bool { return $request->header('X-Requested-With') === 'XMLHttpRequest'; } } ?>

Результат выполнения кода для разных запросов:

// Для обычного запроса: false // Для AJAX-запроса: true

Пример

Использование метода в обработчике исключений для гибкого управления форматом ответа:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as BaseHandler; use Throwable; use IlluminateHttpRequest; class Handler extends BaseHandler { public function render($request, Throwable $exception) { if ($exception instanceof ApiException) { return response()->json([ 'error' => $exception->getMessage(), 'code' => $exception->getCode() ], 400); } if ($exception instanceof CustomException && $exception->shouldRenderJsonWhen($request)) { return response()->json([ 'error' => 'Custom error message' ], 403); } return parent::render($request, $exception); } } ?>

Результат выполнения кода:

// Для ApiException: {"error": "...", "code": ...} // Для CustomException с AJAX-запросом: {"error": "Custom error message"}

Смотрите также

  • метод render,
    который отвечает за рендеринг исключения в HTTP-ответ
  • метод respond,
    который используется для формирования ответа на исключение
  • класс Handler,
    который является центральным обработчиком исключений в Laravel
  • исключение HttpException,
    которое является базовым для всех HTTP-исключений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить