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

Класс Exceptions

Класс Exceptions находится в пространстве имён Illuminate\Foundation\Exceptions и предоставляет методы для настройки обработки исключений в приложении. В файле bootstrap/app.php вы можете использовать методы этого класса для регистрации кастомных репортеров и рендереров.

Основные методы класса: reportable - регистрирует кастомный репортер для определённого типа исключений, renderable - регистрирует кастомный рендерер для определённого типа исключений, dontReport - указывает исключения, которые не нужно логировать, shouldRenderJsonWhen - задаёт условие для рендеринга ответа в формате JSON.

Синтаксис

<?php use Illuminate\Foundation\Configuration\Exceptions; return app->withExceptions(function (Exceptions $ex) { // Регистрация обработчиков }); ?>

Пример использования reportable

Давайте зарегистрируем кастомный репортер для исключения CustomException, который будет отправлять уведомление в Slack:

<?php use Illuminate\Foundation\Configuration\Exceptions; use App\Exceptions\CustomException; use Illuminate\Support\Facades\Log; return app->withExceptions(function (Exceptions $ex) { $ex->reportable(function (CustomException $e) { Log::channel('slack')->error('Custom exception occurred: ' . $e->getMessage()); }); }); ?>

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

"Custom exception logged to Slack channel"

Теперь при возникновении CustomException, исключение будет отправлено в Slack, а стандартная обработка логирования продолжит работу.

Пример использования renderable

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

<?php use Illuminate\Foundation\Configuration\Exceptions; use App\Exceptions\CustomException; use Illuminate\Http\JsonResponse; return app->withExceptions(function (Exceptions $ex) { $ex->renderable(function (CustomException $e) { return new JsonResponse([ 'error' => 'Custom error', 'message' => $e->getMessage(), ], 400); }); }); ?>

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

{"error":"Custom error","message":"Something went wrong"}

Теперь при возникновении CustomException, клиент получит кастомный JSON-ответ со статусом 400.

Пример использования dontReport

Давайте укажем, что исключение CustomException не должно логироваться в стандартные логи Laravel:

<?php use Illuminate\Foundation\Configuration\Exceptions; use App\Exceptions\CustomException; return app->withExceptions(function (Exceptions $ex) { $ex->dontReport([ CustomException::class, ]); }); ?>

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

"CustomException will not be logged"

Теперь CustomException не будет записываться в файл логов, если вы не добавили для него кастомный репортер.

Пример использования shouldRenderJsonWhen

Давайте настроим условие, при котором все исключения будут рендериться в JSON-формате:

<?php use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Http\Request; return app->withExceptions(function (Exceptions $ex) { $ex->shouldRenderJsonWhen(function (Request $request) { return $request->expectsJson() || $request->is('api/*'); }); }); ?>

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

{"message":"Server Error","status":500}

Теперь для всех запросов, ожидающих JSON или начинающихся с api/, исключения будут возвращаться в формате JSON.

Пример полной конфигурации

Давайте объединим все методы в одном файле конфигурации:

<?php use Illuminate\Foundation\Configuration\Exceptions; use App\Exceptions\CustomException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; return app->withExceptions(function (Exceptions $ex) { // Не логировать определённые исключения $ex->dontReport([ CustomException::class, ]); // Кастомный репортер $ex->reportable(function (CustomException $e) { Log::channel('slack')->error('Custom exception occurred: ' . $e->getMessage()); }); // Кастомный рендерер $ex->renderable(function (CustomException $e) { return new JsonResponse([ 'error' => 'Custom error', 'message' => $e->getMessage(), ], 400); }); // Условие для JSON-рендеринга $ex->shouldRenderJsonWhen(function (Request $request) { return $request->expectsJson() || $request->is('api/*'); }); }); ?>

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

{"error":"Custom error","message":"Something went wrong"}

Эта полная конфигурация демонстрирует все основные возможности класса Exceptions для обработки исключений в приложении.

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

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