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

Метод renderable

Метод renderable класса Exceptions используется для регистрации замыкания, которое определяет, как конкретное исключение должно быть преобразовано в HTTP-ответ. Метод принимает два параметра: класс исключения и замыкание, которое возвращает экземпляр Response. Это позволяет централизованно управлять отображением ошибок в приложении, не дублируя логику в каждом обработчике.

Синтаксис

<?php $this->renderable(ExceptionClass::class, function (Exception $e, Request $request) { return response()->view('errors.custom', ['exception' => $e], 500); }); ?>

Пример 1

Зарегистрируем пользовательский рендеринг для исключения ModelNotFoundException в файле App\Exceptions\Handler:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Database\Eloquent\ModelNotFoundException; use Throwable; class Handler extends ExceptionHandler { public function register() { $this->renderable(function (ModelNotFoundException $e, $request) { if ($request->expectsJson()) { return response()->json([ 'error' => 'Resource not found', 'message' => $e->getMessage(), ], 404); } return response()->view('errors.404', [], 404); }); } } ?>

Пример 2

Используем renderable для кастомизации отображения исключения валидации:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Validation\ValidationException; use Throwable; class Handler extends ExceptionHandler { public function register() { $this->renderable(function (ValidationException $e, $request) { if ($request->expectsJson()) { return response()->json([ 'status' => 'error', 'errors' => $e->errors(), ], 422); } return redirect()->back() ->withErrors($e->errors()) ->withInput(); }); } } ?>

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

{ "status": "error", "errors": { "email": [ "The email field is required." ] } }

Пример 3

Обработаем исключение AccessDeniedHttpException с перенаправлением на страницу входа:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Throwable; class Handler extends ExceptionHandler { public function register() { $this->renderable(function (AccessDeniedHttpException $e, $request) { if ($request->expectsJson()) { return response()->json([ 'error' => 'Forbidden', 'message' => 'You do not have permission to access this resource.', ], 403); } return redirect()->route('login') ->with('error', 'Please login to access this page.'); }); } } ?>

Пример 4

Кастомизируем отображение исключения QueryException для возврата дружественного сообщения в продакшене:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Database\QueryException; use Throwable; class Handler extends ExceptionHandler { public function register() { $this->renderable(function (QueryException $e, $request) { if (app()->environment('production')) { if ($request->expectsJson()) { return response()->json([ 'error' => 'Database error', 'message' => 'An error occurred while processing your request.', ], 500); } return response()->view('errors.database', [], 500); } return response()->view('errors.database', [ 'error' => $e->getMessage(), ], 500); }); } } ?>

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

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