Laravel11では、これまでとミドルウェアの登録方法が色々と変わっています。

Laravel10までは app/Http/Kernel.phpにミドルウェアを登録していましたが、Laravel11では、bootstrap/app.phpにミドルウェアを登録します。
本記事では、Laravel11でのミドルウェアの登録方法を分かりやすく説明しますね。

Laravel10からの違いで悩んだら、ご覧ください。
Laravel11でのミドルウェアの登録方法
たとえば、adminユーザーのみが見れるページを作るとします。
ミドルウェアはこれまでどおり、下記コマンドで作成可能です。コマンド実行後、app/Http/Middlewareの中にミドルウェアファイルができます。

今回はAdminCheckMiddlewareを作りますが、ミドルウェアの名前はお好みで変えてください。
php artisan make:middleware AdminCheckMiddleware
あらかじめ、usersテーブルに “role”カラムを作成しておき、カラムに”admin”と入っていたら、admin(管理者)ユーザーということにします。コード例は次のとおりです。
【AdminCheckMiddlewareコード例】
class AdminCheckMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
// ログインユーザーのロールがadminなら次に進める
if (Auth::user()->role == 'admin') {
return $next($request);
}
// 権限がない場合は403エラーを返す
abort(403, 'Unauthorized access.');
}
}
作成したミドルウェアを登録します。bootstrap/app.phpファイルに次のようにいれます。
【bootstrap/app.php】
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
// 作成したミドルウェアを登録
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'admin.check' => AdminCheckMiddleware::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
AdminCheckMiddlewareを使用する際に、admin.checkというエイリアスを使います。エイリアスとは、本来の名前やクラス名の代わりに、より短く簡単な名前を付ける仕組みです。

エイリアスは「あだ名」と考えてしまうと分かりやすいですよ。
これでミドルウェアができました。実際に、管理者しか見れないページにミドルウェアを設定するには、次のようにルート設定を記述します。
【web.php】
// 管理者しか見れないページ
Route::get('/admin', function () {
return view('admin');
})->middleware(['auth', 'admin.check'])->name('admin');
おまけ:ミドルウェアの実行順序
なお、Webアプリ全体に適用されるグローバルミドルウェアというものがありますが、このグローバルミドルウェアよりも先、または後にミドルウェアを実行したい場合は、appendやprependを使用します。
公式マニュアルには次のように書かれています。
appendメソッドは、ミドルウェアをグローバルミドルウェアリストの最後に追加します。ミドルウェアをリストの先頭に追加したい場合は、prependメソッドを使うべきです。
appendを使用すると、指定したミドルウェアはグローバルミドルウェアよりも後に実行されます。prependを使用すると、指定したミドルウェアはグローバルミドルウェアよりも先に実行されます。
【append利用例】
// 作成したミドルウェアを登録
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'admin.check' => AdminCheckMiddleware::class,
]);
$middleware->append(AdminCheckMiddleware::class);
})
CSRF除外設定
なおCSRF保護から除外したいパスは、これまではMiddleware/VerifyCsrfTokenにいれていました。Laravel11では、これもbootstrap/app.phpに記述します。たとえば/stripeというパスをCSRF除外にするには、次のように書きます。
【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',
// api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
// channels: __DIR__.'/../routes/channels.php',
health: '/up',
)
// CSRF除外
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'/stripe',
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
TrimStrings除外設定
TrimStringsから除外するパスも同じような形で、bootstrap/app.phpに記述します。たとえば/passwordというパスをTrimStrings除外にするには、次のように書きます。
*TrimStrnigsは、HTTPリクエストで送信されたデータの文字列値から、先頭と末尾の空白を自動的に削除(トリム)するミドルウェアです。
<?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',
// api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
// channels: __DIR__.'/../routes/channels.php',
health: '/up',
)
// TrimStrings除外
->withMiddleware(function (Middleware $middleware) {
$middleware->trimStrings(except: [
'/password',
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
さいごに
以上、Laravel11からのmiddlewareについてでした。下記公式マニュアルも参考にしてください。
Laravel11になってから変わった他の部分については、下記記事にまとめています。



コメント