Laravelのミドルウェアの意味と使い方について





1. ミドルウェアとは?
Laravelのミドルウェアは、HTTPリクエストがアプリケーションに到達する前やレスポンスがブラウザに返される前に、リクエストやレスポンスを処理するためのフィルターのような役割を果たします。
簡単に言うと、「リクエストやレスポンスに対して事前に行う処理を定義する仕組み」です。
たとえば、ユーザーがログインしているかどうかを確認する、特定のリクエストをIPアドレスで制限する、またはリクエストデータを暗号化する、といったことができます。
1.1. ミドルウェアの種類
2. ミドルウェアの主な用途
- 認証: ユーザーがログインしているか確認する。
- 権限の確認: ユーザーが特定の操作を行う権限を持っているか検証する。
- リクエストの変更: リクエストデータを加工する。
- レスポンスの変更: レスポンスにヘッダーを追加する。
- セキュリティ対策: CORS(クロスオリジンリクエストの制御)やCSRF(クロスサイトリクエストフォージェリ)の防止。
3. ミドルウェアの作成手順
3.1. ミドルウェアを作成する
Laravelでは、以下のartisanコマンドを使用してミドルウェアを作成できます。
php artisan make:middleware ExampleMiddleware
このコマンドを実行すると、app/Http/Middleware
ディレクトリに新しいミドルウェアファイルが作成されます。
3.2. ミドルウェアの処理を記述する
作成された ExampleMiddleware.php
を開き、以下のようにhandleメソッドに処理を記述します。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class ExampleMiddleware
{
public function handle(Request $request, Closure $next)
{
// リクエストの処理
if ($request->header('X-Example-Header') !== 'Valid') {
abort(403);
}
// 次のミドルウェアまたはコントローラに渡す
return $next($request);
}
}
この例では、リクエストヘッダーに X-Example-Header
が含まれていない場合、403エラーを返しています。
3.3. ミドルウェアを登録する
ミドルウェアをアプリケーションに登録するには、app/Http/Kernel.php
を編集します。また、次のようにLaravelで登録できるミドルウェアには種類があります。
- グローバルミドルウェア
アプリケーション全体で適用されるミドルウェア。
Kernel.php
の$middleware
に登録。 - ルートミドルウェア
特定のルートやルートグループに適用されるミドルウェア。
Kernel.php
の$routeMiddleware
に登録し、ルートで指定。 - ミドルウェアグループ
複数のミドルウェアをまとめて適用するためのグループ。
Kernel.php
の$middlewareGroups
に定義。
以下の例では、グローバルミドルウェアとして登録しています。
protected $middleware = [
// 他のミドルウェア
\App\Http\Middleware\ExampleMiddleware::class,
];
ルートミドルウェアとして登録したい場合は、以下に追加します。
protected $routeMiddleware = [
'example' => \App\Http\Middleware\ExampleMiddleware::class,
];




3.4. ルートでミドルウェアを適用する
ルートに特定のミドルウェアを適用するには、以下のように記述します:
Route::get('/example', function () {
return 'Hello, Middleware!';
})->middleware('example');
3.5. 複数のミドルウェアの適応
複数のミドルウェアを組み合わせて適用することも可能です。以下のように配列で指定します。
Route::get('/example', function () {
return 'Hello, Middleware!';
})->middleware(['auth', 'example']);
これにより、リクエストが auth
ミドルウェアと example
ミドルウェアを順番に通過します。
3.6. ミドルウェアのグループ
特定のルートに複数のミドルウェアをまとめて適用したい場合、ミドルウェアグループを使用します。
Kernel.php
でミドルウェアグループを定義します。
protected $middlewareGroups = [
'web' => [
// 他のミドルウェア
\App\Http\Middleware\ExampleMiddleware::class,
],
];
web
グループを適用したいルートは次のように記述します。
Route::middleware(['web'])->group(function () {
Route::get('/home', function () {
return 'Welcome Home!';
});
});