Как выводить свою страницу ошибки для каждого исключения?
Не могу разобраться в исключениях. А должен, т.к. если начну делать неправильно, то потом по всему проекту придется исправлять. Меня вот что интересует: как я понял, когда мы кидаем 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 все исключения стали понятны пользователю?
500.blade - это и есть пользовательская страница. Единственное, что нужно видеть пользователю, при ошибке InvalidArgumentException.
Никакой другой не нужно
Выходит, где-то внутри приложения при проверках всегда кидать такие исключения? Не те параметры попали в метод - InvalidArgumentException, если что-то общее то просто Exception? Я вижу там очень много всяких типов ошибок, наверное они все не нужны и достаточно буквально нескольких?
throw new \Exception('qwe', 404);
в dev режиме получаешь подробную страницу с ошибкой.
в prod пользователь увидит красивую 404/500 страницу, а в логах будет ошибка подробно.