「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Lithe のミドルウェア: その仕組みと独自のミドルウェアを作成する方法

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

2024 年 11 月 8 日に公開
ブラウズ:871

Middleware in Lithe: How It Works and How to Create Your Own

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

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

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

ミドルウェア関数は、アプリケーションに受信する 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 リクエストがアプリケーションに到達する前に通過する一連の「レイヤー」であると想像してください。各レイヤーはリクエストを検査または拒否できます。


ミドルウェアのロード

ミドルウェアをロードするには、\Lithe\App クラスの use() メソッドを呼び出し、ミドルウェア関数を指定します。例えば:

$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!');
});

アプリがリクエストを受信するたびに、「LOGGED」というメッセージが出力されます。ミドルウェアのロード順序は重要です。最初にロードされたものが最初に実行されます。

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


ミドルウェアの使用

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

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

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

アプリケーション レベルのミドルウェアをアプリケーションのインスタンスにアタッチするには、use() メソッドまたは METHOD() メソッドを使用します。ここで、METHOD は小文字の HTTP メソッド (GET、PUT、POST など) を指します。

この例は、パスのないミドルウェアを示しています。ミドルウェアはリクエストを受信するたびに実行されます:

$app->use(function ($req, $res, $next) {
    echo 'Hello World!';
    $next();
});

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

$app->get('/user/:id', function ($req, $res, $next) {
    if ($req->param('id') === '0') {
        return $next();
    } 
    $res->send('ID is not 0');
}, function ($req, $res) {
    $res->send('regular');
});

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

ルーター レベルのミドルウェアはアプリケーション レベルのミドルウェアと同じように動作しますが、\Lithe\Http\Router:
のインスタンスにアタッチされます。

$router = new \Lithe\Http\Router;

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

ルーターレベルのミドルウェアの例を次に示します:

$router = new \Lithe\Http\Router;

$router->use(function ($req, $res, $next) {
    echo 'Time: ', Date('H:i:s'), '
'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { $res->redirect('/'); } $next(); }, function ($req, $res) { echo $req->param('id'); $res->render('special'); }); $app->use('/api', $router);

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

サードパーティのミドルウェアを使用して、Lithe アプリケーションに機能を追加できます。必要な PHP モジュールをインストールし、アプリケーションまたはルーター レベルでロードします。

\Lithe\Middleware\Session\session を使用してセッション ミドルウェアをロードする例を次に示します:

use function Lithe\Middleware\Session\session;

$app = new \Lithe\App;

$app->use(session([
    'secure' => true
]));

Lithe で一般的に使用されるサードパーティのミドルウェアのリストについては、サードパーティのミドルウェア リソースを確認してください。


構成可能なミドルウェア

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

これで、カスタム構成でミドルウェアを使用できるようになります:

$app->use(my_middleware(['option1' => '1', 'option2' => '2']));

他の開発者が Composer 経由でインストールできるミドルウェアを作成するには、lithemod/flow というパッケージがあります。 Lithe で HTTP リクエストとレスポンスを処理するためのインターフェイスとユーティリティを提供し、さまざまなアプリケーションにわたって標準化されたすぐに使用できるミドルウェアの作成を容易にします。

lithemod/flow は、リクエストとレスポンスの統合インターフェイスを提供することで、堅牢なミドルウェアの構築を支援し、開発をより効率的かつ組織的にします。これにより、ミドルウェアの他のプロジェクトへの統合が簡素化され、コードが一貫した標準に準拠することが保証されます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/lithephp/middleware-in-lithe-how-it-works-and-how-to-create-your-own-3h67?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3