Lithe のミドルウェア: その仕組みと独自のミドルウェアを作成する方法

DDD
リリース: 2024-10-25 08:33:28
オリジナル
533 人が閲覧しました

Middleware no Lithe: Como Funciona e Como Criar o Seu Próprio

ミドルウェアは、アプリケーションに受信する HTTP リクエストを検査およびフィルタリングするための便利なメカニズムを提供します。たとえば、Lithe には、アプリケーション ユーザーが認証されているかどうかを確認するミドルウェアが含まれています。ユーザーが認証されていない場合、ミドルウェアはユーザーをアプリケーションのログイン画面にリダイレクトします。ただし、ユーザーが認証されている場合、ミドルウェアはアプリケーション内でのリクエストの続行を許可します。


Lithe でのミドルウェアの仕組み

Lithe では、ミドルウェアは、アプリケーションの要求/応答ループ内の要求オブジェクト ($req)、応答オブジェクト ($res)、および $next 関数にアクセスできる関数です。 $next 関数は、呼び出されると、現在のミドルウェアの次のミドルウェアを実行する Lithe ルーター内の関数です。

ミドルウェア関数は、アプリケーションに入る HTTP リクエストを検査、フィルタリング、処理するための便利なメカニズムを提供します。

ミドルウェア関数は次のタスクを実行できます:

  • 任意のコードを実行します。
  • リクエストオブジェクトとレスポンスオブジェクトに変更を加えます。
  • リクエストとレスポンスのサイクルを終了します。
  • スタック内の次のミドルウェアを呼び出します。

現在のミドルウェア関数が要求/応答サイクルを終了しない場合は、$next() を呼び出して次のミドルウェア関数に制御を渡す必要があります。それ以外の場合、リクエストは保留中になります。


ミドルウェア機能の要素

次のコードは、ミドルウェア関数呼び出しの要素を示しています。

$app->use(function ($req, $res, $next) {
    $next();
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

場所:
- $req: ミドルウェア関数の HTTP リクエスト引数。慣例により「$req」と呼ばれます。
- $res: ミドルウェア関数の HTTP 応答引数。慣例により「$res」と呼ばれます。
- $next: ミドルウェア関数のコールバック引数。慣例により「$next」と呼ばれます。


ミドルウェアの定義

myLogger という単純なミドルウェアの例から始めましょう。このミドルウェアは、リクエストが通過するたびに LOGGED メッセージを出力します。ミドルウェアは、myLogger:
という変数に割り当てられる関数として定義されます。

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記の $next() の呼び出しに注意してください。この関数を呼び出すと、アプリケーション内の次のミドルウェア関数が呼び出されます。 $next() 関数は PHP や Lithe の一部ではありませんが、ミドルウェア関数に渡される 3 番目の引数です。 $next() 関数には任意の名前を付けることができますが、慣例により常に「next」と呼ばれます。混乱を避けるために、常にこの規則を使用してください。

ミドルウェアは、HTTP リクエストがアプリケーションに到達する前に通過する必要がある一連の「レイヤー」と考えるのが最善です。各レイヤーはリクエストを検査し、完全に拒否することもできます。


ミドルウェアのロード

ミドルウェア関数をロードするには、目的のミドルウェア関数を指定して、LitheApp クラスの use() メソッドを呼び出します。たとえば、次のコードは、ルート パス (/) へのルートを実行する前に、myLogger ミドルウェア関数をロードします。

$app->use(function ($req, $res, $next) {
    $next();
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

アプリケーションはリクエストを受信するたびに、「LOGGED」というメッセージを出力します。

ミドルウェアのロード順序は重要です。最初にロードされたミドルウェア関数も最初に実行されます。

myLogger ミドルウェア関数は単にメッセージを出力し、$next() 関数を呼び出してリクエストをスタック上の次のミドルウェア関数に渡します。


ミドルウェアの使用

Lithe アプリケーションは次のタイプのミドルウェアを使用できます:

  • アプリケーションレベルのミドルウェア
  • ルーターグレードのミドルウェア
  • サードパーティのミドルウェア

アプリケーションレベルのミドルウェア

use() メソッドと METHOD() メソッドを使用して、アプリケーション レベルのミドルウェアをアプリケーション オブジェクトのインスタンスにバインドします。METHOD は、ミドルウェア関数が処理するリクエストの HTTP メソッド (GET、PUT、POST など) です。小文字。

この例は、アセンブリ パスのないミドルウェア関数を示しています。この関数は、アプリケーションがリクエストを受信するたびに実行されます。

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

以下の例は、パス /user/:id で GET リクエストを処理するミドルウェアを示しています。

$app = new \Lithe\App;

$myLogger = function ($req, $res, $next) {
    echo 'LOGGED';
    $next();
};

$app->use($myLogger);

$app->get('/', function ($req, $res, $next) {
    $res->send('Hello World!');
});
ログイン後にコピー

ルーターレベルのミドルウェア

ルーター レベルのミドルウェアは、LitheHttpRouter のインスタンスに関連付けられていることを除いて、アプリケーション レベルのミドルウェアと同じように機能します。

$app->use(function ($req, $res, $next) {
    echo 'Hello World!';
    $next();
});
ログイン後にコピー

USE 関数と METHOD 関数を使用してルーターレベルのミドルウェアをロードします。

次のコード例は、ルーターレベルのミドルウェアを使用するミドルウェア システムを示しています。

$app->get('/user/:id', function ($req, $res, $next) {
    // Se o ID do usuário for '0', passa para o próximo middleware
    if ($req->param('id') === '0') {
        return $next();
    } 

    // Caso contrário, envia uma resposta específica
    $res->send('ID não é 0');
}, function ($req, $res) {
    // Envia uma resposta quando o ID for '0'
    $res->send('regular');
});
ログイン後にコピー

サードパーティのミドルウェア

サードパーティのミドルウェアを使用して、Lithe アプリに機能を追加します。

目的の機能に必要な PHP モジュールをインストールし、それをアプリケーション レベルまたはルーター レベルでアプリケーションにロードします。

次の例は、セッションミドルウェアである LitheMiddlewareSessionsession 関数のロードを示しています。

$router = new \Lithe\Http\Router;
ログイン後にコピー

Lithe で一般的に使用されるサードパーティのミドルウェア機能の部分的なリストについては、「サードパーティのミドルウェア」を参照してください。

構成可能なミドルウェア

ミドルウェアを構成可能にする必要がある場合は、オプションまたはその他のパラメーターの配列を受け入れる関数を作成し、入力パラメーターに基づいてミドルウェア実装を返します。

$app->use(function ($req, $res, $next) {
    $next();
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これで、以下に示すようにミドルウェアが使用できるようになります。

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

以上がLithe のミドルウェア: その仕組みと独自のミドルウェアを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!