Ошибка HTTP в Inertia
Давайте рассмотрим ситуацию, когда
обработчик исключений уже
настроен через метод
handleExceptionsUsing,
но команде удобнее держать
весь код ответов в одном
месте рядом с другими
исключениями Laravel.
Тот же сценарий можно
описать вручную.
Под капотом Inertia сам
регистрирует колбэк
respond в настройках
исключений. Вы можете
сделать это напрямую:
при кодах 403, 404, 500
и 503 вне локальной среды
вернуть метод render
с компонентом ErrorPage,
преобразовать ответ через
toResponse и сохранить
статус методом setStatusCode.
Компонент ErrorPage
с пропсом status
может совпадать с тем,
что уже лежит в проекте.
Давайте откроем настройки исключений и добавим ветку для Inertia:
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
use Throwable;
return Application::configure(basePath: dirname(__DIR__))
->withExceptions(function (Exceptions $exceptions) {
$exceptions->respond(
function (
Response $response,
Throwable $exception,
Request $request
) {
if (
! app()->environment(['local', 'testing'])
&& in_array($response->getStatusCode(), [500, 503, 404, 403])
) {
return Inertia::render('ErrorPage', [
'status' => $response->getStatusCode(),
])
->toResponse($request)
->setStatusCode($response->getStatusCode());
}
return $response;
}
);
})
->create();
Настройте для проекта OfficeHub ручной ответ с компонентом HubErrorPage при коде 500 на боевом сервере, не меняя локальную отладку.