見出し画像

Laravel学習記録 #029 ミドルウェアを学ぶ

Laravelのミドルウェアについて学習したものをまとめています。

ミドルウェアについて

  • HTTPリクエストを処理する際に前処理や後処理を含める

  • グローバルミドルウェア: 全てのリクエストに適用される。

  • ルートミドルウェア: 特定のルートにのみ適用される。

  • グループミドルウェア: グループに適用される。

ミドルウェアを使ってみる

グローバルミドルウェアとしてログの出力ミドルウェアを例に作成してみます。

ミドルウェアの作成

php artisan make:middleware LogMiddleware

app/Http/Middleware/LogMiddleware.php に作成されます。

ミドルウェア処理

簡単に前処理や後処理としてログを出力します。
ポイントは「 $next($request)」より前が前処理、後が後処理だということです。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class LogMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        // リクエスト情報をログに記録
        Log::info('前処理 URL: ' . $request->fullUrl());

        $response = $next($request);

        // レスポンス情報をログに記録
        Log::info('後処理 Status Code: ' . $response->getStatusCode());

        return $response;
    }
}


グローバルミドルウェアとして適用

作成したクラスをグローバルミドルウェアとして登録します。
app/Http/Kernel.phpクラスの$middlewareプロパティに追加すればOKです。

protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\LogMiddleware::class, // ログミドルウェア
    ];

順番通りに実行されます。

確認してみましょう。
適当なルートを作成して動かしてみます。
ログイン画面を表示してみるとログに以下が出力されました。

[2024-03-30 09:56:35] local.INFO: 前処理 URL: http://localhost/login  
[2024-03-30 09:56:35] local.INFO: 後処理 Status Code: 200  

これで作成したミドルウェアが適用されていることがわかります。

この記事が気に入ったらサポートをしてみませんか?