Налаштування middleware у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 25 березня, 2025
З новим Laravel 11 змінилася структура конфігурації middleware, що може зацікавити розробників. Чи готові ви дізнатися, як нові можливості спростять вашу роботу з middleware? Читайте статтю, щоб дізнатися про переваги та нові функції Laravel!

Починаючи з Laravel 11, конфігурація middleware була перенесена з HTTP Kernel у файл bootstrap вашого застосунку. Хоча деякі вже існуючі програми, що оновилися з Laravel 10 до Laravel 11 чи 12, можуть містити визначені middleware, новий Laravel застосунок не постачається з теками app/Http/Middleware.

Laravel 11 представляє нову стандартну структуру застосунку з меншою кількістю файлів. Зокрема, нові задекларовані Laravel застосунки містять менше сервісних провайдерів, middleware та файлів конфігурації.

Однак ми не рекомендуємо тим, хто оновлює Laravel 10 до 11, намагатися змінити структуру свого застосунку, адже Laravel 11 ретельно налаштований і також підтримує структуру застосунку Laravel 10.

Не лякайтеся, якщо ваш застосунок містить стандартні middleware від Laravel. Це може означати, що ваш застосунок оновився до останньої версії, але зберіг згенеровані middleware у своїй структурі.

# Налаштування Middleware у Laravel 11+

Конфігурація всіх middleware у Laravel тепер виконується у файлі bootstrap/app.php за допомогою методу withMiddleware(). З цього файлу ви можете визначати глобальні middleware, додавати, попереджати, створювати псевдоніми тощо.

Якщо ви переходите з Laravel 10, для конфігурації маршрутів ви використовували файл app/Http/Kernel.php і властивість класу. Для глобальних middleware використовувалася властивість $middleware:

protected $middleware = [
    // \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Illuminate\Http\Middleware\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

У Laravel 11 клас Kernel більше не є частиною коду застосунку. Ось приклад визначення глобального middleware:

// bootstrap/app.php

use App\Http\Middleware\LogRequest;

->withMiddleware(function (Middleware $middleware) {
    // Додати в кінець стеку middleware
    $middleware->append(LogRequest::class);
})

Щоб додати глобальний middleware на початку стеку, ви можете скористатися методом prepend:

use App\Http\Middleware\LogRequest;

->withMiddleware(function (Middleware $middleware) {
    // Додати middleware на початку стеку
    $middleware->prepend(LogRequest::class);
})

# Визначення Груп Middleware

У Laravel 10 та раніше групу middleware визначали за допомогою властивості груп middleware у файлі app/Http/Kernel.php:

protected $middlewareGroups = [
    'web' => [
        // ...
    ],
    'api' => [
        // ...
    ],
    'group-1' => [
        // ...
    ],
];

У нових застосунках Laravel ви можете використовувати методи prepend/append для групування:

$middleware->prependToGroup('group-1', First::class);

$middleware->appendToGroup('group-1', [
    First::class,
    Second::class,
]);

Виникає також питання: "Як я можу налаштувати одну з вбудованих груп, таких як web або api?" Ви можете зробити це, використавши відповідні методи web і api:

$middleware->web(append: [
    ExampleWebMiddleware::class,
]);

$middleware->api(prepend: [
    ExampleApiMiddleware::class,
]);

$middleware->api(remove: [
    ExampleApiMiddleware::class,
]);

# Сортування Middleware

У Laravel 10 пріоритет middleware визначався через властивість $middlewarePriority у файлі HTTP Kernel.php:

protected $middlewarePriority = [
    \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
    \Illuminate\Cookie\Middleware\EncryptCookies::class,
    // ...
];

Як ви могли здогадатися, пріоритет тепер налаштовується у файлі bootstrap/app.php за допомогою методу priority:

->withMiddleware(function (Middleware $middleware) {
    $middleware->priority([
        //
    ]);
});

# Псевдоніми Middleware

У Laravel 10 ви використовували властивість $middlewareAliases класу Kernel для мапування псевдонімів до middleware, що полегшує додавання middleware до маршрутів і груп:

protected $middlewareAliases = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    // ...
];

Починаючи з Laravel 11, для цього ви повинні використовувати метод alias:

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'log' => LogRequest::class
    ]);
});

// У маршруті ви можете використовувати `log`
Route::get('/messages/{message}', function () {
    // ...
})->middleware('log');

# Додаткова Інформація

Усе про визначення, налаштування та використання middleware ви можете дізнатися в документації Laravel. Також перевірте документацію Middleware для Laravel 12, але обов'язково використовуйте відповідну документацію для вашої версії Laravel

Популярні

Logomark Logotype

Випущено Livewire 3.6

Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!

Logomark Logotype

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше