Laravel прекращает выполнение при возникновении исключения и отображает сообщение с использованием некоторого шаблона по умолчанию - Обработка исключений в laravel - PullRequest
0 голосов
/ 03 июля 2018

Я использую последнюю версию laravel (5.6)

Теперь в моем коде, когда возникает исключение, laravel рассматривает его как фатальную ошибку, немедленно прекращает выполнение и отображает сообщение об ошибке в каком-то шаблоне.

Но я не хочу этого, я хочу обрабатывать исключения и отображать некоторые пользовательские сообщения об ошибках

Я нашел несколько способов, как

  1. изменение значения APP_DEBUG в файле .env на false. Но это также отображает другой страница с сообщением "упс! некоторые хотят этого неправильно";

  2. В Handler.php, который находится в app / Exceptions, я поместил некоторые исключения в не отчетную зону. Но приложение все еще сообщает о них

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

На самом деле вы хотите обрабатывать свои исключения. Оберните код в попытку, и вы можете делать все что угодно (например, email / slack / log). После того, как вы обработали исключение, вы все равно можете использовать собственные страницы ошибок http внутри перехвата, чтобы конечный пользователь получил дружеское сообщение на красиво оформленной странице. Существует даже встроенный помощник для отчетов, который позволяет вам вести внешний журнал и продолжать обработку кода.

@ Ответ Девона, приведенный выше: пользовательские страницы ошибок HTTP также дают вам именно то, что вам нужно.

0 голосов
/ 03 июля 2018

Обратите внимание на несколько важных моментов:

  1. Класс App \ Exceptions \ Handler - это место, где все исключения, запускаемые вашим приложением, регистрируются и затем возвращаются пользователю. Этот класс имеет два метода report () и render () , оба имеют свою ответственность.
  2. Метод отчета *1013* используется для регистрации исключений. По умолчанию метод отчета передает исключение в базовый класс , где регистрируется исключение. Тем не менее, вы можете регистрировать исключения, как пожелаете. Например, если вам нужно сообщать о различных типах исключений по-разному, вы можете использовать оператор PHP instanceof сравнения
  3. Метод render отвечает за преобразование данного исключения в HTTP-ответ, который должен быть отправлен обратно в браузер. По умолчанию исключение передается в базовый класс, который генерирует для вас ответ. Однако вы можете проверить тип исключения или вернуть свой собственный ответ.

Как и в вашем случае, вы хотите вернуть пользовательское сообщение для исключения, внутри render () вы можете использовать оператор сравнения instanceof PHP и вернуть собственную логику.

Пример:

if($exception instanceof  PostTooLargeException || $exception instanceof  FileException){
     return response()->json([
        'error' => true,
        'error_message' => "The file you are trying to upload exceeds the maximum limit. Please try to upload a smaller file."
     ],200); 
}

Пройдите https://laravel.com/docs/5.6/errors, чтобы получить больше данных

0 голосов
/ 03 июля 2018

Пользовательские страницы ошибок HTTP

Laravel позволяет легко отображать пользовательские страницы ошибок для различных HTTP коды состояния. Например, если вы хотите настроить страницу ошибки для 404 HTTP коды состояния, создайте ресурсы / views / errors / 404.blade.php. Этот файл будет обработан для всех 404 ошибок, сгенерированных вашим приложение. Представления в этом каталоге должны быть названы, чтобы соответствовать код состояния HTTP, которому они соответствуют. Экземпляр HttpException поднятые функцией abort будут переданы в представление как переменная $ исключение.

https://laravel.com/docs/5.6/errors#custom-http-error-pages

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...