Как сделасть кастомную 500-ую страницу в Laravel и пробрасывать ошибки в Sentry
Я думаю, что уже ни для кого не секрет, что Sentry — классная штука в разработке. Есть отличное облако с бесплатным тарифом, куча компонентов для внедрения Sentry во фреймворки.
Задача: сделать красивую 500-ую ошибку на проекте, написанном на Laravel
Решений в интернете куча. Но если у вас страница с 500-ой ошибкой реализована через blade-компоненты. Как быть? Обычные методы не работали, потому как срабатывает 500-ая ошибка и рендеринг blade-шаблонов не происходит. Можно конечно сверстать 500-ку на чистом HTML/CSS, но это супер неудобно.
Подзадача: пробрасывать все ошибки, возникшие в blade-шаблоне в sentry
Решение подзадачи помогло найти решение общей задачи. Я добавил код в app/Exceptions/Handler.php
public function render($request, Throwable $e)
{
if ($this->shouldReport($e)) {
Integration::captureUnhandledException($e);
}
parent::render($request, $e);
}
и вуаля — ошибки сыпятся в Sentry. Класс, теперь я знаю, что есть проблемы на сайте. Но все равно выскакивает 500-ка. А это плохо.
И тут меня осенило. Я добавил редирект на страницу с 500-ой ошибкой и код получился вот такой
public function render($request, Throwable $e)
{
if ($this->shouldReport($e)) {
Integration::captureUnhandledException($e);
return redirect('/500');
}
parent::render($request, $e);
}
Теперь в Senty получаю ошибку, а пользователь видит сверстанную из blade-компонентов страницу с красивым сообщением.