Слава Україні!

Laravel 11. Пользовательские страницы ошибок

Пользовательские страницы ошибок в Laravel 11 для fontend и backend
28-го вересня 2024, 15:12

В 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/*'])) {
        ...
    }

Важлива інформація

Міністерство оборони
України
з 24.02 по 11.11
втрати противника
орієнтовно склали:
710660 ( +1770 ) особового складу
9253 ( +4 ) танків
18766 ( +40 ) бойових бронемашин
20314 ( +34 ) артилерійських систем
1245 ( +0 ) РСЗВ
996 ( +0 ) засоби ППО
369 ( +0 ) літаків
329 ( +0 ) гелікоптерів
28802 ( +119 ) автомобільної техніки
28 ( +0 ) кораблі / катери
2636 ( +2 ) крилаті ракети
18676 ( +57 ) БПЛА
3620 ( +16 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни