Как стать автором
Обновить

Комментарии 17

Как-то колхозно. Может, лучше вернуть кастомную вьюху?

А как сделать кастомную вьюху, да ещё и так, чтобы она обрабатывала blade-компоненты?

Пользователь словил 500, хочет вернуться на страницу, предшествующую упавшей, нажав кнопку назад. Вместо предыдущей работающей страницы, пользователь опять попадает на /500

правильно я понимаю логику?

На 500-ой никто не отправляет пользователя назад. Если он нажмет в браузере назад, то да, его вернет на 500-ку. Как вариант, можно добавить обработку предыдущего линка и в шаблоне добавить кнопку "Назад" и возвращать пользователя правильно. Хорошее предложение.

браузерные кнопки назад и вперёд отменили?

кмк отправлять пользователя принудительно на /500 - антипаттерн

А если 500 из вьюхи пришла? Меню например из базы которая упала. Или 500 на сервисах

Я тут не знаю, предполагаю, что VUE сама умеет обрабатывать ошибки. Есть ещё у Sentry SDK для JavaScript. Можно её использовать.

Я про view, про блейды.
Ну и сходу зачем редирект делать? Почему бы не сделать сразу return response()->view()? Так не будут работать x-slot?

Ваше предложение лучше. Позволяет избежать редиректы. Обновил тело статьи.

Не понял, а исходно там был редирект? То есть страница ошибки возвращала не 500, а 302? Серьёзно?

Не понял, а при чем здесь VUE? Ведь мы говорили вроде бы про рендеринг на сервере? Да, VUE умеет. но зачем тогда вообще было затеваться со "сверстанной из blade-компонентов страницей"?

Не совсем понятно, для чего эта статья. Обработка ошибок, отображение кастомных вьюх и многое другое - всё подробно описано в разделе Error Handling официальной документации.

Я в офциально документации не нашел, как пробрасывать ошибки шаблонов Sentry, но допускаю, что не все дочитал. А вот как заставить показывать кастомный шаблон 500-ки с использованием blade-компонентов - задача для меня была нерешена уже более месяца. А здесь получилось найти такое решение.

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

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

Цитата из официальной документации, по аналогии так же создаёшь и для 500

Все так, но вы попробуйте использовать blade-шаблону с компонентами x-slot. У вас не получится ничего. В моём случае это возможно.

Все исключения обрабатываются классом App\Exceptions\Handler. Этот класс содержит метод register, в котором вы можете зарегистрировать свои отчеты об исключениях и замыкания рендеринга. Отчеты об исключениях используются для регистрации исключений или отправки их во внешнюю службу, например Flare, Bugsnag или Sentry.

Вы можете использовать метод reportable для регистрации замыкания, которое должно быть выполнено, когда необходимо сообщить об исключении конкретного типа

Что касается view:

По умолчанию обработчик исключений Laravel будет преобразовывать исключения в HTTP-ответ за вас. Однако вы можете зарегистрировать свое замыкание для отображения исключений конкретного типа. Вы можете сделать это с помощью метода renderable обработчика исключений.

public function register()
{
    $this->renderable(function (InvalidOrderException $e, $request) {
        return response()->view('errors.invalid-order', [], 500);
    });
}

И буду работать x-slot в шаблонах?

Если так, то выглядит интереснее.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории