初心者でも安心!PHPミドルウェアの作り方と応用例5選

PHPミドルウェアを学ぶ人がパソコンで記事を読むイメージPHP
この記事は約6分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPのミドルウェアを学びたいあなたへ。

この記事を読めば、PHPミドルウェアの作り方や使い方、さらにはカスタマイズ方法までが手に入るでしょう。

また、実際のサンプルコードとともに5つの応用例をご紹介します。手を動かしながら学べば、より理解が深まりますよ。

●PHPミドルウェアとは

ミドルウェアとは、PHPのアプリケーションでリクエストとレスポンスを処理する部分です。

具体的には、リクエストが入ってくると、そのリクエストに対して何らかの処理を行い、それを次のミドルウェアまたはアプリケーションに渡します。

例えば、ユーザの認証や、ログの記録、セキュリティチェックなどの機能を実装することが可能です。

●PHPミドルウェアの作り方

PHPのミドルウェアを作成するには、まずは基本的なミドルウェアの構造を理解することが重要です。

○サンプルコード1:基本的なミドルウェアの作成

このコードでは、ミドルウェアクラスを作成し、その中に__invokeメソッドを定義しています。

この例では、まだ具体的な処理は何も行っていませんが、ここにミドルウェアで行いたい処理を記述することで、自分だけのミドルウェアを作成することができます。

class Middleware {
    public function __invoke($request, $response, $next)
    {
        // ミドルウェアで行う処理

        // 次のミドルウェアまたはアプリケーションへリクエストとレスポンスを渡す
        return $next($request, $response);
    }
}

●PHPミドルウェアの使い方

PHPのミドルウェアを使用するには、アプリケーションのミドルウェアスタックに追加する必要があります。

これは、アプリケーションがリクエストを受け取ったときに、どのミドルウェアを通過するかを決定します。

○サンプルコード2:ミドルウェアの適用

このコードでは、新たに作成したミドルウェアをアプリケーションに適用しています。

この例では、addメソッドを使って、ミドルウェアスタックにMiddlewareクラスの新しいインスタンスを追加しています。

$app = new \Slim\App;
$app->add(new Middleware());

●PHPミドルウェアの注意点と対処法

ミドルウェアを使用する上での注意点としては、ミドルウェアの処理順序が重要となります。

ミドルウェアは追加された順に処理されるため、前後関係を理解して適切な順序で追加することが求められます。

また、ミドルウェアが処理を行う前後でリクエストやレスポンスを適切に扱うことも大切です。

このため、ミドルウェア内で例外が発生した場合の対処も考慮する必要があります。

●PHPミドルウェアのカスタマイズ方法

PHPミドルウェアはカスタマイズ可能で、ユーザの要件に合わせて自由に変更することができます。

○サンプルコード3:ミドルウェアのカスタマイズ

このコードでは、カスタムミドルウェアを作成する方法を紹介しています。

この例では、コンストラクタに設定を渡すことで、ミドルウェアの動作をカスタマイズしています。

class CustomMiddleware {
    private $config;

    public function __construct($config)
    {
        $this->config = $config;
    }

    public function __invoke($request, $response, $next)
    {
        // ミドルウェアで行うカスタム処理

        return $next($request, $response);
    }
}

●PHPミドルウェアの応用例とサンプルコード

PHPミドルウェアは多様な用途で利用することができます。

ここでは認証とロギングという2つの一般的な用途について見ていきましょう。

○サンプルコード4:認証ミドルウェア

このコードでは、認証ミドルウェアを作成しています。

この例では、リクエストを受け取り、checkAuthメソッドで認証を行い、認証が通らない場合は401ステータスを返すようにしています。

class AuthMiddleware
{
    public function __invoke($request, $response, $next)
    {
        if (!$this->checkAuth($request)) {
            return $response->withStatus(401);
        }
        
        return $next($request, $response);
    }

    private function checkAuth($request)
    {
        // 認証処理
    }
}

○サンプルコード5:ロギングミドルウェア

このコードでは、ロギングミドルウェアを作成しています。

この例では、リクエストとレスポンスの情報をログとして記録しています。

class LoggingMiddleware
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function __invoke($request, $response, $next)
    {
        $response = $next($request, $response);

        $this->logger->info('Request', [
            'method' => $request->getMethod(),
            'uri' => (string) $request->getUri(),
            'status' => $response->getStatusCode(),
        ]);

        return $response;
    }
}

まとめ

PHPミドルウェアは、リクエストとレスポンスの前後で行われる処理をカプセル化するための強力なツールです。

これにより、アプリケーションの各部分を整理し、再利用可能なコンポーネントを作成することが可能となります。

認証やロギングなどのように、様々な機能を追加するためのミドルウェアを自由に作成し、アプリケーションに適用することが可能です。