Починаючи з 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 тепер виконується у файлі 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);
})
У 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,
]);
У 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([
//
]);
});
У 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