Laravel 11. Пользовательские страницы ошибок
В Laravel 11-ой версии разработчики «упростили» приложение и переместили большую часть шаблона в код фреймворка. Из-за этого многие файлы были удалены, одним из которых является класс ExceptionHandler.
Поэтому, для изменения вида страниц ошибок, необходимо изменить файл bootstrap/app.php.
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Но сначала необходимо подготовить сами страницы. Для этого выполним команду:
php artisan vendor:publish --tag=laravel-errors
Далее скопируем появившуюся папку resources/views/errors
в подпапку с шаблонами
страниц для админки (напр. resources/views/_backend).
В каждом шаблоне страниц ошибок небходимо исправить директиву @extends('errors::minimal')
указав нужный "главный" шаблон (напр. @extends('_backend.layouts.app')
), а также
изменить дизайн по своему вкусу.
Осталось добавить код вызова страниц ошибок. Предположим, что админка находится в поддомене с адресом https://backoffice.site.com. В файле bootstrap/app.php
в метод withExceptions()
добавляем:
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (NotFoundHttpException $exception, Request $request) {
if (str_contains($request->httpHost(), 'backoffice.')) {
switch ($exception->getStatusCode()) {
case 400:
return response()->view("_backend.errors.400", [], 400);
case 403:
return response()->view("_backend.errors.403", [], 403);
case 404:
return response()->view("_backend.errors.404", [], 404);
case 500:
return response()->view("_backend.errors.500", [], 500);
case 503:
return response()->view("_backend.errors.503", [], 503);
default:
return response()->view("_backend.errors.unknown", [], 503);
}
}
});
})->create();
При этом следует иметь ввиду, что если админка находится в основном
домене (напр. https://site.com/admin), то условие if
будет иметь вид:
if ($request->is(['admin', 'admin/*'])) {
...
}
Важлива інформація
України
втрати противника
орієнтовно склали: