Laravel 11 でmiddlewareを追加する

こんにちは!とびろぐ管理人のとびうおです。

今回は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等で使いたいような文字で定義するような形もしなくていいとのことです。

Laravel - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small...

まずはmiddlewareを作る

まずは、今まで通りにmiddlewareを作りましょう。

では、実際に作ってみましょう。

//sailなし
php artisan make:middleware Tobilog

//sailの場合
./vender/bin/sail php artisan make:middleware Tobilog

と打つことで、ミドルウェアのクラスが作成されます。

Laravel 11 でmiddlewareを追加する
Laravel 11 でmiddlewareを追加する

Tobilogってなんのミドルウェアだよ…というのは置いておいて、ここまでは今までのLaravelと同じように作られていることが分かりました。

とびうお
とびうお

ここまではLaravel 11と一緒だね!

実際にどのように登録すればいいんだろう?

では、実際に登録していこうと思います。

このミドルウェアが対応しているかどうかがわかるようにLaravel 11の設定を以下のように変更しておきます。

Laravel 11 でmiddlewareを追加する

ddでこのミドルウェアが走ったら止める

Laravel 11 でmiddlewareを追加する

複数のエンドポイントを用意

今の所 / でも /welcoome でも

Laravel 11 でmiddlewareを追加する
Screenshot

このような画面が表示されます。

global middlewareの場合

まず、グローバルミドルウェアの場合の解説を行います。

グローバルミドルウェアとは、すべてのルートに適応されるミドルウェアという意味です。

グローバルミドルウェアの登録はいったって簡単です。bootstrap/app.phpのwithMiddlewareのところに以下のように追加します。

Laravel 11 でmiddlewareを追加する
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を通過していることが分かります。

Laravel 11 でmiddlewareを追加する

個別middlewareの場合

続いて、このルートにはこのミドルウェアを登録したいといった場合の登録の仕方について考えていきます。

これは、至って簡単で、以下のようにweb.phpの中に使うように追加できます。

Laravel 11 でmiddlewareを追加する
Route::get('/', function () {
    return view('welcome');
});

Route::get('/welcome', function () {
    return view('welcome');
})->middleware(\App\Http\Middleware\Tobilog::class);

このように、直接classを使用すると使用することができます。

そうすると、以下のように / と /welcome で違いが生まれます。

/の場合

Laravel 11 でmiddlewareを追加する
Screenshot

/welcomeの場合

Laravel 11 でmiddlewareを追加する
とびうお
とびうお

classを直接指定すればいいというのは
簡単だね!

groupのミドルウェアを登録する

続いて、複数のエンドポイントに対して適応したい場合を考えていきます。この場合も今までは文字列を指定していましたが、直接classを指定する形へと変更されています。

Laravel 11 でmiddlewareを追加する
<?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 - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small...

とびろぐの他の記事も見てね!

とびろぐでは多くのLaravelの記事を書いています。

ぜひご覧ください!

Laravel
「Laravel」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました