Обработка ошибок Laravel 8 | Обновление 2021

Большинство веб-приложений имеют особые механизмы обработки ошибок. Используя их, они отслеживают ошибки и исключения и регистрируют их для анализа производительности. В этой главе вы прочитаете об обработке ошибок и исключений в приложениях Laravel.

Важные точки

Прежде чем продолжить подробное изучение обработки ошибок в Laravel, обратите внимание на следующие важные моменты:

  • Для любого нового проекта Laravel по умолчанию регистрирует ошибки и исключения в классе App \ Exceptions \ Handler. Затем они отправляются обратно пользователю для анализа.
  • Когда ваше приложение Laravel находится в режиме отладки, подробные сообщения об ошибках с трассировкой стека будут отображаться при каждой ошибке, возникающей в вашем веб-приложении.

 

Журнал ошибок

Регистрация ошибок в веб-приложении помогает отслеживать их и планировать стратегию их устранения. Информацию журнала можно настроить в веб-приложении в файле config / app.php. Обратите внимание на следующие моменты при работе с журналом ошибок в Laravel:

  • Laravel использует библиотеку ведения журналов PHP monolog.
  • Параметры ведения журнала, используемые для отслеживания ошибок: однократный, ежедневный, системный журнал и журнал ошибок.
  • Например, если вы хотите регистрировать сообщения об ошибках в файлах журнала, вы должны установить значение журнала в конфигурации вашего приложения на ежедневно, как показано в следующей команде:
'log' => env('APP_LOG','daily'),'log_max_files' => 25;

Уровни серьезности

Поскольку Laravel использует библиотеку ведения журналов PHP monolog, существуют различные параметры, используемые для анализа уровней серьезности. Доступны различные уровни серьезности: сообщения об ошибках, критические, предупреждения и аварийные сообщения. Вы можете установить уровень серьезности, как показано в команде ниже —

'log_level' => env('APP_LOG_LEVEL', 'error')

Для Laravel 8, обновленного следующим образом

Для Laravel 8 мы находим новые методы в handler.php. Я делюсь своим кодом для обработки исключений в проекте Laravel.

См. также:  Праздничная ловушка

По умолчанию проект Laravel поставляется с новым методом регистрации.

/**
 * Register the exception handling callbacks for the application.
 *
 * @return void
 */
public function register()
{

    $this->reportable(function (Throwable $e){

    });
}

Мы должны добавить сюда новый метод обработки исключений.

public function handleException( Throwable $e){
    if ($e instanceof HttpException) {
        $code = $e->getStatusCode();
        $defaultMessage = \Symfony\Component\HttpFoundation\Response::$statusTexts[$code];
        $message = $e->getMessage() == "" ? $defaultMessage : $e->getMessage();
        return $this->errorResponse($message, $code);
    } else if ($e instanceof ModelNotFoundException) {
        $model = strtolower(class_basename($e->getModel()));
        return $this->errorResponse("Does not exist any instance of {$model} with the given id", Response::HTTP_NOT_FOUND);
    } else if ($e instanceof AuthorizationException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_FORBIDDEN);
    } else if ($e instanceof TokenBlacklistedException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_UNAUTHORIZED);
    } else if ($e instanceof AuthenticationException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_UNAUTHORIZED);
    } else if ($e instanceof ValidationException) {
        $errors = $e->validator->errors()->getMessages();
        return $this->errorResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
    } else {
        if (config('app.debug'))
            return $this->dataResponse($e->getMessage());
        else {
            return $this->errorResponse('Try later', Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }
}

Вы видите методы ответа как вызываемые. Например

return $this->errorResponse('Try later', Response::HTTP_INTERNAL_SERVER_ERROR);

Я создаю Черту для ответов. Вы тоже можете это сделать. Я разделяю с тобой свою черту.

/**
 * Data Response
 * @param $data
 * @return JsonResponse
 */
public function dataResponse($data): JsonResponse
{
    return response()->json(['content' => $data], Response::HTTP_OK);
}

/**
 * Success Response
 * @param string $message
 * @param int $code
 * @return JsonResponse
 */
public function successResponse(string $message, $code = Response::HTTP_OK): JsonResponse
{
    return response()->json(['success' => $message, 'code' => $code], $code);
}

/**
 * Error Response
 * @param $message
 * @param int $code
 * @return JsonResponse
 *
 */
public function errorResponse($message, $code = Response::HTTP_BAD_REQUEST): JsonResponse
{
    return response()->json(['error' => $message, 'code' => $code], $code);
}

Это моя черта тела. После создания этой характеристики и функции handleException вы добавляете код в метод register.

$this->renderable(function (Throwable $e) {
    return $this->handleException($e);
});

После этого тело вашей функции будет выглядеть так.

public function register()
{

    $this->reportable(function (Throwable $e){

    });

    $this->renderable(function (Throwable $e) {
        return $this->handleException($e);
    });
}

И в конце концов, ваша обработка исключений и ошибок работает очень хорошо.

См. также:  Десять выходных 15.10: Несколько интересных чтений, которые мне попались

Спасибо, что прочитали эту статью. Пожалуйста, поделитесь и аплодируйте для поддержки новых статей.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: