Метод respond
Метод respond используется в классе Exceptions
для определения пользовательского ответа при возникновении
исключения. Он позволяет разработчику гибко настроить
формат и содержимое ответа в зависимости от типа исключения
и контекста запроса. Метод принимает замыкание, которое
получает экземпляр исключения и текущий запрос, и должно
возвращать объект ответа.
Синтаксис
<?php
$this->respond($callback);
?>
Пример
Давайте настроим пользовательский ответ для исключения
ModelNotFoundException, возвращая JSON-ответ
с сообщением об ошибке:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateDatabaseEloquentModelNotFoundException;
use Throwable;
class Handler extends ExceptionHandler
{
public function register(): void
{
$this->reportable(function (Throwable $e) {
//
});
$this->respond(function (Throwable $e, $request) {
if ($e instanceof ModelNotFoundException && $request->wantsJson()) {
return response()->json([
'message' => 'Record not found.'
], 404);
}
});
}
}
?>
Результат выполнения кода:
{"message": "Record not found."}
Пример
Давайте настроим ответ для исключения
ValidationException, возвращая ошибки
валидации в формате JSON:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateValidationValidationException;
use Throwable;
class Handler extends ExceptionHandler
{
public function register(): void
{
$this->respond(function (Throwable $e, $request) {
if ($e instanceof ValidationException) {
return response()->json([
'errors' => $e->errors(),
'message' => 'Validation failed.'
], 422);
}
});
}
}
?>
Результат выполнения кода:
{"errors": {"email": ["The email field is required."]}, "message": "Validation failed."}
Пример
Давайте настроим ответ для исключения
AuthenticationException, возвращая
сообщение о необходимости авторизации:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateAuthAuthenticationException;
use Throwable;
class Handler extends ExceptionHandler
{
public function register(): void
{
$this->respond(function (Throwable $e, $request) {
if ($e instanceof AuthenticationException) {
return response()->json([
'message' => 'Unauthenticated. Please login.'
], 401);
}
});
}
}
?>
Результат выполнения кода:
{"message": "Unauthenticated. Please login."}
Смотрите также
-
метод
reportable,
который регистрирует пользовательские отчёты -
метод
renderable,
который определяет пользовательский рендеринг -
метод
dontReport,
который указывает исключения для игнорирования -
метод
shouldRenderJsonWhen,
который определяет условие для JSON-ответа