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

Класс Handler

Класс Handler находится в файле app/Exceptions/Handler.php и наследуется от базового класса IlluminateFoundationExceptionsHandler. Он отвечает за обработку всех исключений, возникающих в приложении, и определяет, как эти ошибки должны быть преобразованы в HTTP-ответы. Основные методы класса включают report, render и shouldReport, которые позволяют управлять логированием ошибок, их отображением и условиями отправки уведомлений.

Синтаксис

Базовый синтаксис класса Handler:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use Throwable; class Handler extends ExceptionHandler { protected $dontReport = []; protected $dontFlash = []; public function register(): void { $this->reportable(function (Throwable $e) { // }); $this->renderable(function (Throwable $e, $request) { // }); } } ?>

Пример

Регистрация обработчика для логирования ошибок с помощью метода reportable:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use Throwable; use IlluminateSupportFacadesLog; class Handler extends ExceptionHandler { public function register(): void { $this->reportable(function (Throwable $e) { if ($e instanceof CustomException) { Log::channel('custom')->error('Custom error: ' . $e->getMessage()); } }); } } ?>

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

"Custom error: User not found"

Пример

Настройка пользовательского отображения ошибок с помощью метода renderable:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use Throwable; use IlluminateHttpRequest; use IlluminateHttpResponse; class Handler extends ExceptionHandler { public function register(): void { $this->renderable(function (Throwable $e, Request $request) { if ($e instanceof CustomException && $request->is('api/*')) { return response()->json([ 'error' => 'Custom error occurred', 'message' => $e->getMessage(), ], 400); } }); } } ?>

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

{"error":"Custom error occurred","message":"Invalid input data"}

Пример

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

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use Throwable; use IlluminateHttpRequest; use IlluminateHttpResponse; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($this->isHttpException($exception)) { $statusCode = $exception->getStatusCode(); if ($statusCode === 404) { return response()->view('errors.404', [], 404); } if ($statusCode === 403) { return response()->view('errors.403', [], 403); } } return parent::render($request, $exception); } } ?>

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

<!-- Content of errors/404.blade.php --> <h1>Page Not Found</h1> <p>The requested page could not be found.</p>

Пример

Настройка списка исключений, которые не нужно логировать, с использованием свойства dontReport:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use Throwable; use IlluminateValidationValidationException; use IlluminateAuthAuthenticationException; class Handler extends ExceptionHandler { protected $dontReport = [ ValidationException::class, AuthenticationException::class, ]; } ?>

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

"Exceptions not logged: ValidationException, AuthenticationException"

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

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