💨

Laravel ミドルウェアの整理

2022/03/05に公開

はじめに

開発を行う中でよく出るミドルウェア。
何か処理してるんだろなー、くらいで、何をしているか結局わからない状態だったので、整理の為にこちらに記載します。

ミドルウェアとは

クライアントからリクエストを受けとり、コントローラー処理が行われる前後に処理を追加する仕組み。
複数あるコントローラーに、共通のミドルウェア処理を付与することができる。

共通の処理を記述する箇所 app/Http/Middleware
反映させる為に、ルートファイルに記述 web.php

app/Http/Middleware/Test.php

namespace App\Http\Middleware;

class Test
{
    public function test(){
    echo "これはテストです";
    }
}

web.php

Route::get('user', 'UserController@index' )->middleware(Test::class);

グローバルミドルウェア

全てのコントローラーでミドルウェアを使用したい場合、
ルートファイルにミドルウェアの記述せずに、Httpフォルダ内にあるKernel.phpにミドルウェアの記述をする。

Kernel.php

    protected $middleware = [
        \App\Http\Middleware\Test::class,
    ];

グループミドルウェア

複数のミドルウェアをまとめて反映させることができる。

Kernel.php

    protected $middlewareGrouops = [
        'test' => [
	\App\Http\Middleware\Test::class,
	\App\Http\Middleware\Practice::class,
	],
    ];

web.php

Route::get('test', 'TestCOntroller@index')->middleware('test');

上記の記述により、ミドルウェアTest、Practiceが反映される。

ルートミドルウェア

ミドルウェアのプレフィックス(エイリアスネームのようなもの)を付与。記述が楽になる。

Kernel.php

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
	]

web.php(グループミドルウェアと同じ記述)

Route::get('test', 'TestCOntroller@index')->middleware('auth');

さいごに

認証系の処理をミドルウェアとして処理をすることが多い模様。
ex) ログインしていなければ、どのページをみてもログインページに飛ぶ。

Discussion