Gromfer
@Gromfer
Увлекаюсь Laravel

Как выводить свою страницу ошибки для каждого исключения?

Не могу разобраться в исключениях. А должен, т.к. если начну делать неправильно, то потом по всему проекту придется исправлять. Меня вот что интересует: как я понял, когда мы кидаем abort(404); то нам выводится файл 404.blade в котором у меня есть объект exception и в теории я должен выводить сообщение. Но это как я понял уже для прода, то есть чтобы пользователь видел только сообщение. Точно также работает и HttpException (ну по сути abort() это просто хелпер который это и делает). Но когда я выбрасываю InvalidArgumentException и другие, без http, они всегда показываются в дебаг laravel странице со всей нужной информацией.

Соответственно, мне конечно же нужны обычные исключения для дебаггинга. Я буду выбрасывать их по всему проекту. Но когда проект выходит в прод, как сделать так чтобы при InvalidArgumentException и других ему подобных выводилась пользовательская страница. Проблема в том, что когда я выключаю debug в .env, всегда выходит страница с именем 500.blade, независимо от того, какой код я передал в параметры.

И так,
throw new \Exception('qwe', 404);
В дебаг режиме - всё хорошо, в офф дебаг - всегда страница 500.blade.
throw new HttpException(404, 'message');
В обоих режимах отображает шаблон с нужным названием и всё хорошо.

Подытожу, какие исключения в каких случаях и как правильно выбрасывать, чтобы потом перелючив debug в false все исключения стали понятны пользователю?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 4
on_click
@on_click
https://laravel.demiart.ru/isklyucheniya-laravel-l... на мой взгляд хорошая статья по теме

throw new \Exception на проде всегда будет 500 отдавать, возможно как то обойти это можно, но не нужно)
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега PHP
500.blade - это и есть пользовательская страница. Единственное, что нужно видеть пользователю, при ошибке InvalidArgumentException.
Никакой другой не нужно
Ответ написан
throw new \Exception('qwe', 404);
в dev режиме получаешь подробную страницу с ошибкой.
в prod пользователь увидит красивую 404/500 страницу, а в логах будет ошибка подробно.
Ответ написан
Вы можете воспользоваться глобальным обработчиком исключений App\Exceptions\Handler и отображать все, что вам заблагорассудится на любое исключение.

Подробнее можно прочитать в этой бесплатной книге:
https://github.com/adelf/acwa_book_ru/blob/master/...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы