ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター|スリムなミドルウェアを使用します
スリムフレームワークミドルウェア:強力なPHPマイクロアプリケーションの構築
Slimは強力なPHP Miniフレームワークであり、ミドルウェア機能により、アプリケーションでの認証やキャッシュなど、さまざまなフィルタースタイルのサービスを実装できます。ミドルウェアはアプリケーションをカプセル化し、アプリケーションの環境に影響を与え、リクエストと応答オブジェクトに影響を与える可能性があります。
キーポイント:
SlimMiddleware
メソッドをオーバーライドする必要があります。この方法はミドルウェアのエントリポイントであり、そこから戻る(実行プロセスを中断する)か、次のレイヤーを呼び出すことができます。ミドルウェアは、応答のヘッダーと本体を操作できます。 call()
Slimのadd()
メソッドへの呼び出しによって登録されます。新しいミドルウェアが以前に追加されたミドルウェアを囲むため、ミドルウェアは逆の順序で追加する必要があります。ミドルウェアの構成は、通常、サービスコンストラクターを介して行われます。 add()
スリムミドルウェアの理解
スリムドキュメントは、タマネギへのスリムなアプリケーションをたとえています。タマネギの各層はミドルウェアです。これは適切な比phorです。それをよりよく理解するために、認証とキャッシュを使用するアプリケーションを書いていると仮定しましょう。私たちのアーキテクチャは次のようになるかもしれません:
ミドルウェアの実装
カスタムミドルウェアを実装する方法を理解するには、上記のキャッシュミドルウェアとして使用できるコードを見てみましょう。実際、基本的なスリムミドルウェアコンポーネントを実装する要件はほとんどありません。クラスを拡張し、メソッドをオーバーライドするクラスを作成するだけです。ミドルウェアのエントリポイントは、このSlimMiddleware
メソッドであり、そこから戻る(実行プロセスを中断する)か、次のレイヤーを呼び出すことができます。 call()
<code class="language-php"><?php namespace MyMiddleware; class Cache extends SlimMiddleware { protected $db; public function __construct(PDO $db) { $this->db = $db; } public function call() { $key = $this->app->request()->getResourceUri(); $rsp = $this->app->response(); $data = $this->fetch($key); if ($data) { // 缓存命中...返回缓存的内容 $rsp["Content-Type"] = $data["content_type"]; $rsp->body($data["body"]); return; } // 缓存未命中...继续生成页面 $this->next->call(); if ($rsp->status() == 200) { // 缓存结果以供将来查找 $this->save($key, $rsp["Content-Type"], $rsp->body()); } } protected function fetch($key) { $query = "SELECT content_type, body FROM cache WHERE key = " . $this->db->quote($key); $result = $this->db->query($query); $row = $result->fetch(PDO::FETCH_ASSOC); $result->closeCursor(); return $row; } protected function save($key, $contentType, $body) { $query = sprintf("INSERT INTO cache (key, content_type, body) VALUES (%s, %s, %s)", $this->db->quote($key), $this->db->quote($contentType), $this->db->quote($body) ); $this->db->query($query); } }</code>
call()
メソッド最初に、コンテンツがキャッシュで使用できるかどうかを確認します。もしそうなら、それは応答のContent-Type
ヘッダーとボディを設定してから戻り、パイプラインを短縮します。キャッシュが逃した場合は、$this->next->call()
に電話して次のミドルウェアレイヤーを呼び出します。プロセスが他のミドルウェア呼び出しからこの時点に戻ると、要求ステータスが迅速にチェックされ、将来の検索のために関連するデータがキャッシュされます。このクラスはSlimのクラスを拡張しているため、SlimアプリケーションのインスタンスにMiddleware
を介してアクセスできるため、応答と要求オブジェクトに間接的にアクセスできます。応答を配列として扱うことにより、応答のヘッダーに影響を与え、その$this->app
メソッドを介して応答の本体に影響を与えることができます。 body()
およびfetch()
メソッドは保護されたヘルパーメソッドであり、データベースクエリをラップしてコンテンツを見つけて持続するだけです。例を完了するためだけにここにそれらを含めました。列save()
、cache
、key
を備えたcontent_type
という名前のテーブルがあると想定しています。ニーズに応じて、持続メカニズムは異なる場合があります。また、(簡単にするために)有効期限が切れたキャッシュはここには示されていませんが、簡単に自分でマージできます。 body
ミドルウェアの登録と構成
をラップします。 ミドルウェアは、スリムアプリケーションのあらゆる側面を実装するためのエレガントなソリューションであることがわかりました。この記事では、ミドルウェアアーキテクチャがどのように機能し、独自のミドルウェアを実装するために必要なことを説明します。 CSRF保護やHTTP認証などの基本的なミドルウェアの例を備えた小さな追加リポジトリがあります。ここでこの例をリファクタリングし、プルリクエストを送信したので、有用なミドルウェアサービスを書いた場合、他の人もそれから利益を得られるようにプロジェクトに送信することを検討してみませんか? (フォトリアからの写真) (以下はFAQであり、元のコンテンツに従って調整および補足されており、いくつかの重複したコンテンツが合理化されています) faqs
Slim Middlewareは、HTTPリクエストと応答を操作できるスリムフレームワークの強力なツールです。スリムアプリケーションの前後にコードを実行する方法を提供して、着信要求または発信応答を変更する方法を提供するため、重要です。これは、認証、キャッシュ、ロギングなどのさまざまな目的に使用できます。
を受信すると呼ばれるメソッドが必要です。 メソッドは、リクエストと応答を操作できる場所です。
メソッドを呼び出すことによって行われます。これにより、特定のルートのみに影響を与えるミドルウェアを使用できます。
ミドルウェアを使用してスリムでエラー処理を実行するにはどうすればよいですか? ミドルウェアを使用してスリムでユーザーを認証できますか? はい、ミドルウェアはスリムでの認証によく使用されます。これは、有効なセッションまたはミドルウェアのトークンをチェックして実行でき、ユーザーが認証されていない場合はエラー応答を返します。 ミドルウェアを使用してスリムにログインする方法は? ログファイルへのリクエストと応答に関する情報を記述することにより、ミドルウェアをロギングに使用できます。これは、アプリケーションのデバッグや監視に非常に役立ちます。 サードパーティのミドルウェアをスリムで使用できますか? はい、Slimはサードパーティのミドルウェアをサポートしています。これは、自分のミドルウェアのようにアプリケーションに追加できます。これにより、既存のミドルウェアを活用して一般的なタスクを完了することができます。 スリムミドルウェアをテストする方法は? スリムミドルウェアのテストには、モックリクエストと応答を作成し、ミドルウェアに渡すことが含まれます。その後、リクエストや応答の変更や例外のスローなど、ミドルウェアが予想どおりに動作することを主張できます。 add()
<code class="language-php"><?php require_once "../vendor/autoload.php";
$app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));</code>
メソッドから登録できます。新しいミドルウェアは以前に追加されたミドルウェアを囲むため、これはコールの反対の順序で追加する必要があることを意味します。 add()
上記の例では、<code class="language-php"><?php $app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
$app->add(new MyMiddlewareAuth($db));
// ...</code>
ミドルウェアはCache
が呼び出されると、実行プロセスは上記の図に示されているものと類似しており、最初に認証ミドルウェアに入力し、次にルートまでずっと作業します。ミドルウェアの構成は、通常、サービスコンストラクターを介して行われます。この例では、キャッシュテーブルにアクセスできるようにアクティブなデータベース接続を渡すだけですが、動作をカスタマイズするために必要な情報を受け入れるためにクラスを書くことができます。たとえば、コンポーネントは、Auth
およびCache
メソッドを公開するハンドラーオブジェクトを受け入れることができます。コンポーネント構成の一部として機能を提供します。 $app->run()
fetch()
save()
結論
MiddlewareInterface
process()
ServerRequestInterface
RequestHandlerInterface
process()
スリムアプリケーションにミドルウェアを追加する方法は? add()
スリムの特定のルートにミドルウェアを使用できますか? Route
App
add()
グローバルミドルウェアとルーティングミドルウェアの違いは何ですか?
以上がPHPマスター|スリムなミドルウェアを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。