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

Метод render

Метод render определён в классе AppExceptionsHandler и вызывается автоматически при возникновении исключения в приложении. Он преобразует объект исключения в HTTP-ответ, который будет отправлен клиенту. Метод принимает два параметра: объект запроса $request и объект исключения $exception. По умолчанию он вызывает родительский метод для стандартной обработки, но вы можете переопределить его для кастомной логики.

Синтаксис

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { // custom rendering logic return parent::render($request, $exception); } } ?>

Пример

Давайте переопределим метод render для возврата JSON-ответа при ошибке валидации:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use IlluminateValidationValidationException; use Throwable; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof ValidationException) { return response()->json([ 'status' => 'error', 'message' => 'Validation failed', 'errors' => $exception->errors() ], 422); } return parent::render($request, $exception); } } ?>

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

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

Пример

Давайте переопределим метод render для отображения кастомной страницы ошибки для NotFoundHttpException:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use SymfonyComponentHttpKernelExceptionNotFoundHttpException; use Throwable; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof NotFoundHttpException) { return response()->view('errors.custom_404', [], 404); } return parent::render($request, $exception); } } ?>

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

<!DOCTYPE html> <html> <body> <h1>Custom 404 Page</h1> <p>Page not found</p> </body> </html>

Пример

Давайте переопределим метод render для обработки различных типов исключений с разными HTTP-статусами:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use IlluminateAuthAuthenticationException; use IlluminateValidationValidationException; use SymfonyComponentHttpKernelExceptionAccessDeniedHttpException; use SymfonyComponentHttpKernelExceptionNotFoundHttpException; use Throwable; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof AuthenticationException) { return response()->json([ 'status' => 'error', 'message' => 'Unauthenticated' ], 401); } if ($exception instanceof AccessDeniedHttpException) { return response()->json([ 'status' => 'error', 'message' => 'Forbidden' ], 403); } if ($exception instanceof ValidationException) { return response()->json([ 'status' => 'error', 'message' => 'Validation failed', 'errors' => $exception->errors() ], 422); } return parent::render($request, $exception); } } ?>

Результат выполнения кода при ошибке аутентификации:

{ "status": "error", "message": "Unauthenticated" }

Пример

Давайте переопределим метод render для логирования и отправки уведомлений при критических ошибках:

<?php namespace AppExceptions; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use IlluminateSupportFacadesLog; use AppServicesNotificationService; use Throwable; class Handler extends ExceptionHandler { protected $notificationService; public function __construct(NotificationService $notificationService) { parent::__construct(); $this->notificationService = $notificationService; } public function render($request, Throwable $exception) { if ($exception instanceof CriticalException) { Log::critical('Critical error occurred', [ 'message' => $exception->getMessage(), 'code' => $exception->getCode(), 'file' => $exception->getFile(), 'line' => $exception->getLine() ]); $this->notificationService->sendAdminAlert($exception); return response()->json([ 'status' => 'error', 'message' => 'Critical error occurred' ], 500); } return parent::render($request, $exception); } } ?>

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

{ "status": "error", "message": "Critical error occurred" }

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

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