ホームページ >バックエンド開発 >PHPチュートリアル >Lithe のミドルウェア: その仕組みと独自のミドルウェアを作成する方法
ミドルウェアは、アプリケーションに受信する HTTP リクエストを検査およびフィルタリングするための便利なメカニズムを提供します。たとえば、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 サイトの他の関連記事を参照してください。