Laravel - ミドルウェア:リクエスト処理のゲートウェイ

こんにちは、未来のLaravel開発者たち!今日は、Laravelミドルウェアの魅力的な世界に潜り込みます。ミドルウェアをアプリケーションのセキュリティガードのように考えましょう - それは、メインアプリケーションのロジックに到達する前にリクエストをチェックし、処理します。一緒にこのエキサイティングな旅に出発しましょう!

Laravel - Middleware

ミドルウェアとは?

コードに飛び込む前に、ミドルウェアとは何かを理解しましょう。パーティ(アプリケーション)を開くとします。ドアにボーイ(ミドルウェア)がいます。このボーイは以下のことをできます:

  1. ゲストリストに載っているか確認(認証)
  2. 適切な服装か確認(バリデーション)
  3. ワristbandを渡す(リクエストに情報を追加)
  4. もしくは、追い返す(リクエストを終了)

これが、ミドルウェアがLaravelアプリケーションで行う基本的なことです!

ミドルウェアの登録

では、どうやってミドルウェアを作成し、登録するか見ていきましょう。

ミドルウェアの作成

まず、ユーザーが18歳以上かをチェックするシンプルなミドルウェアを作成します:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

この例では、CheckAgeミドルウェアはリクエストのageパラメータが18歳以上かをチェックします。それでない場合、ホームページにリダイレクトします。それ以外の場合、リクエストを次のミドルウェアやメインアプリケーションに渡します。

グローバルミドルウェアの登録

このミドルウェアを全てのルートで使用するために、app/Http/Kernel.phpファイルで登録します:

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

ルートミドルウェアの登録

特定のルートでのみミドルウェアを使用したい場合、ルートミドルウェアとして登録します:

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

それから、以下のようにルートで使用できます:

Route::get('adult-only', function () {
//
})->middleware('checkage');

ミドルウェアのパラメータ

時々、ミドルウェアをより柔軟にしたいときがあります。そのためにはミドルウェアパラメータが便利です!

CheckAgeミドルウェアを最低年齢パラメータを受け取るように修正します:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

今では、このミドルウェアを異なる年齢制限で使用できます:

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

素晴らしいですね!ミドルウェアを異なるシナリオで再利用できるようにしました!

終了可能なミドルウェア

時々、ミドルウェアがブラウザにレスポンスが送信された後に何かを行いたいときがあります。そのためには終了可能なミドルウェアが登場します!

レスポンスタイムをログするミドルウェアを作成します:

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}

このミドルウェアはstart_timeをリクエストに追加し、レスポンスが送信された後にトータルのレスポンスタイムをログします。

終了可能なミドルウェアを使用するには、app/Http/Kernel.phpファイルで登録します:

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

ミドルウェアメソッド

以下は、ミドルウェアで使用する主要なメソッドの一覧です:

メソッド 説明
handle() メインのミドルウェアロジック。リクエストを処理し、必要に応じて次のミドルウェアに渡します。
terminate() レスポンスがブラウザに送信された後に実行されます。クリーンアップやログに使用されます。

結論

そして、みんな、ここまで来ましたね!Laravelミドルウェアの地を旅しました。ミドルウェアの作成と登録からパラメータの使用、終了可能なミドルウェアまで。ミドルウェアはリクエスト処理のスイスアーミーナイフのように、多様で強力で、Laravelツールキットの必須アイテムです。

Laravelの冒険を続ける中で、ミドルウェアの創造的な使い方を数多く見つけるでしょう。メンテナンスモードのチェック、リクエストのログ、またはリクエストデータの変換など、可能性は無限です!

codingを続け、学び続け、そして最も重要なのは、楽しみましょう!次回まで、ハッピーLaravel-ing!

Credits: Image by storyset