こんにちは!とびろぐ管理人のとびうおです。
今回はLaravel 11のmiddlewareの追加の方法などについて解説していこうと思います!
Laravel 11の大きな変更点である、
middlewareの変更は避けては通れません
まず、Kernel.phpがない
Laravel 11では、Kernel.phpが消えています。
Laravel 10まで、
「middlewareを作る→Kernel.phpに追加→web.php等に追加」
という流れでmiddlewareの追加を行なっていましたが、そこに大きな変更が加わっています。
Larabel11におけるbootstrap/app.php追加の流れ
公式ドキュメントを見てみると、Laravel 11よりKernel.phpの代わりにbootstrap/app.phpに追加していく、そのままclassを使う、ような流れになっているとのことです。
また、今までのようにKernel.phpに配列にweb.php等で使いたいような文字で定義するような形もしなくていいとのことです。
まずはmiddlewareを作る
まずは、今まで通りにmiddlewareを作りましょう。
では、実際に作ってみましょう。
//sailなし
php artisan make:middleware Tobilog
//sailの場合
./vender/bin/sail php artisan make:middleware Tobilog
と打つことで、ミドルウェアのクラスが作成されます。
Tobilogってなんのミドルウェアだよ…というのは置いておいて、ここまでは今までのLaravelと同じように作られていることが分かりました。
ここまではLaravel 11と一緒だね!
実際にどのように登録すればいいんだろう?
では、実際に登録していこうと思います。
このミドルウェアが対応しているかどうかがわかるようにLaravel 11の設定を以下のように変更しておきます。
ddでこのミドルウェアが走ったら止める
複数のエンドポイントを用意
今の所 / でも /welcoome でも
このような画面が表示されます。
global middlewareの場合
まず、グローバルミドルウェアの場合の解説を行います。
グローバルミドルウェアとは、すべてのルートに適応されるミドルウェアという意味です。
グローバルミドルウェアの登録はいったって簡単です。bootstrap/app.phpのwithMiddlewareのところに以下のように追加します。
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\App\Http\Middleware\Tobilog::class);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
そうすると、 / でも /welecome でも、以下のような画面が表示され、middlewareを通過していることが分かります。
個別middlewareの場合
続いて、このルートにはこのミドルウェアを登録したいといった場合の登録の仕方について考えていきます。
これは、至って簡単で、以下のようにweb.phpの中に使うように追加できます。
Route::get('/', function () {
return view('welcome');
});
Route::get('/welcome', function () {
return view('welcome');
})->middleware(\App\Http\Middleware\Tobilog::class);
このように、直接classを使用すると使用することができます。
そうすると、以下のように / と /welcome で違いが生まれます。
/の場合
/welcomeの場合
classを直接指定すればいいというのは
簡単だね!
groupのミドルウェアを登録する
続いて、複数のエンドポイントに対して適応したい場合を考えていきます。この場合も今までは文字列を指定していましたが、直接classを指定する形へと変更されています。
<?php
use Illuminate\Support\Facades\Route;
Route::middleware([\App\Http\Middleware\Tobilog::class])->group(function () {
Route::get('/', function () {
return view('welcome');
});
Route::get('/welcome', function () {
return view('welcome');
});
});
このように追加することで、使うことができます。
今まで、Kernel.phpに追加してたのを
しなくて良くなったんだね!
まとめ
このようにLaravel 11ではKernel.phpが廃止され、bootstrap/app.phpに追加するようになっていたことや、classを直接指定すればよくなっていたりと、便利になっています!
より、詳しい解説は公式ドキュメントをご覧ください!
とびろぐの他の記事も見てね!
とびろぐでは多くのLaravelの記事を書いています。
ぜひご覧ください!
コメント