ミドルウェアの紹介

WBOY
リリース: 2024-07-18 16:59:52
オリジナル
557 人が閲覧しました

Intro to Middleware

ミドルウェアとは何ですか?

ミドルウェアは、異なるシステム、アプリケーション、またはサービス間のシームレスな通信とデータ交換を可能にするソフトウェア設計パターンです。これは、異種コンポーネント間の相互作用を促進し、機能を追加し、システム全体のパフォーマンスを向上させる上で重要な役割を果たします。

問題

以前のプロジェクトでは、ログインしたユーザーが登録ページにアクセスしたときに再登録を求められるという問題が発生しました。これはミドルウェアの実装が不足していたため、ユーザー エクスペリエンスが低下したことが原因でした。

PHPのミドルウェア

PHP では、ミドルウェアを使用してユーザー登録とログイン機能を処理し、スムーズなユーザー エクスペリエンスを保証できます。ミドルウェアはさまざまなコンポーネント間のブリッジとして機能し、シームレスな通信とデータ交換を可能にします。

if ($_SESSION['user'] ?? false){ 
    header('location: /'); 
    exit(); 
}
ログイン後にコピー

ユーザーがログインしているかどうかをチェックします。そうでない場合は、スクリプトを終了して認証されたユーザーを見つけます。

ルート構成

routes.php ファイルで、ルートに「ゲスト」キーを追加して、ルートをミドルウェアに関連付けることができます。

$router->get('/register', 'controllers/registration/create.php')->only('guest');
ログイン後にコピー

唯一の方法をデバッグする

プロジェクトが期待どおりに動作しているかどうかを確認するには、唯一のメソッドにデバッグ ステートメントを追加できます。

public function only($key){ 
    dd($key); 
}
ログイン後にコピー

唯一のメソッドが get メソッドに関連付けられているため、null 値を扱うことができず、値を返さないため、エラーが表示されます。したがって、メソッドを書き直す必要があります。

Add メソッドの書き換え

すべての値を唯一のメソッドに返すには、router.php ファイルの add メソッドを次のように書き換える必要があります。

public function add($method, $uri, $controller) 
{ 
    $this->routes[] = [ 
        'uri' => $uri, 
        'controller' => $controller, 
        'method' => $method, 
        'middleware'=>null 
    ]; 
    return $this; 
}
ログイン後にコピー

これで、プロジェクトがうまく機能していることがわかります。

唯一の方法

ミドルウェア キーを受け入れるために、router.php ファイル内の唯一のメソッドを変更する必要があります:

public function only($key){ 
    $this->routes[array_key_last($this->routes)]['middleware']=$key; 
    return $this; 
}
ログイン後にコピー

ミドルウェアチェック

create.php ファイルで、ユーザーがログインしているか、ミドルウェアを使用しているゲストであるかを確認できます。

if ($route['middleware']==='guest'){ 
    if($_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
} 
if ($route['middleware']==='auth'){ 
    if(! $_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
}
ログイン後にコピー

認証されたユーザーのみがすべてのページにアクセスできますが、ゲストは限られたページのみにアクセスできます。

ミドルウェアディレクトリの作成

ミドルウェア クラスを整理するには、コア フォルダーに Middleware という名前の新しいディレクトリを作成します。リラックスするためには、労力と時間を節約するために、ある時点で変更を加える必要があるためです。これにより、プロジェクトを理解しやすくすることができます。ここでは 3 つの異なるクラスを作成します。

認証ミドルウェア

Authenticated.php ファイルは、ユーザーがログインしているかどうかを確認し、ログインしている場合はホームページにリダイレクトします。

<?php namespace Core\Middleware; 
class Authenticated { 
    public function handle() { 
        if (! $_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}
ログイン後にコピー

ゲストミドルウェア

Guest.php ファイルは、ユーザーがログインしていないかどうかを確認し、ログインしている場合はホームページにリダイレクトします。

<?php namespace Core\Middleware; 
class Guest { 
    public function handle() { 
        if ($_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}
ログイン後にコピー

ミドルウェアクラス

Middleware.php ファイルは、MAP 定数を使用してミドルウェア キーをそれぞれのクラスにマップします。また、ミドルウェアが存在するかどうかもチェックします。そうでない場合は、プロジェクトにミドルウェアを追加するために、キャッチされなかった例外をユーザーに表示します:

<?php namespace Core\Middleware; 
class Middleware { 
    public const MAP = [ 
        'guest' => Guest::class, 
        'auth' => Authenticated::class 
    ]; 
    public static function resolve($key) { 
        if (!$key) { 
            return; 
        } 
        $middleware = static::MAP[$key] ?? false; 
        if (!$middleware) { 
            throw new \Exception("No matching middleware found for key '{$key}'."); 
        } 
        (new $middleware)->handle(); 
    } 
}
ログイン後にコピー

これらの変更を加えることで、プロジェクトがうまく機能していることがわかります。

しっかりと理解していただけたと思います。

以上がミドルウェアの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート