ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター|スリムなミドルウェアを使用します

PHPマスター|スリムなミドルウェアを使用します

Christopher Nolan
リリース: 2025-02-24 09:00:18
オリジナル
264 人が閲覧しました

スリムフレームワークミドルウェア:強力なPHPマイクロアプリケーションの構築

Slimは強力なPHP Miniフレームワークであり、ミドルウェア機能により、アプリケーションでの認証やキャッシュなど、さまざまなフィルタースタイルのサービスを実装できます。ミドルウェアはアプリケーションをカプセル化し、アプリケーションの環境に影響を与え、リクエストと応答オブジェクトに影響を与える可能性があります。

キーポイント:

  • Slimのミドルウェアは、認証やキャッシュなどのさまざまなフィルタースタイルのサービスを実装できる強力な機能です。ミドルウェアはアプリケーションをカプセル化し、アプリケーションの環境、リクエスト、および応答オブジェクトに影響を与える可能性があります。
  • クラスを拡張するクラスを作成し、SlimMiddlewareメソッドをオーバーライドする必要があります。この方法はミドルウェアのエントリポイントであり、そこから戻る(実行プロセスを中断する)か、次のレイヤーを呼び出すことができます。ミドルウェアは、応答のヘッダーと本体を操作できます。 call() Slimの
  • メソッドを使用して、Slimアプリケーションにミドルウェアを登録します。複数のミドルウェアは、後続の呼び出しがadd()メソッドへの呼び出しによって登録されます。新しいミドルウェアが以前に追加されたミドルウェアを囲むため、ミドルウェアは逆の順序で追加する必要があります。ミドルウェアの構成は、通常、サービスコンストラクターを介して行われます。 add()

スリムミドルウェアの理解

スリムドキュメントは、タマネギへのスリムなアプリケーションをたとえています。タマネギの各層はミドルウェアです。これは適切な比phorです。それをよりよく理解するために、認証とキャッシュを使用するアプリケーションを書いていると仮定しましょう。私たちのアーキテクチャは次のようになるかもしれません:

PHP Master | Working with Slim Middleware

ページコンテンツの生成を担当するコードは、いくつかのミドルウェアのレイヤーに包まれています。その中で最も重要なのは、認証ロジックとキャッシュロジックです。実行プロセスは各レイヤーを通過し、次のレイヤーへのフローを可能にするか、転送されます。最初に、ユーザーが認証に合格したかどうかを確認します。そうでない場合、プロセスが中断され、HTTP 401ステータスが返されます。次に、コンテンツのキャッシュコピーを使用できるかどうかを確認します。その場合、ページのキャッシュされたコピーを使用してプロセスが中断されます。プロセスが最終的にページを生成するロジックに到達するまで、他のミドルウェアレイヤーがある場合があります。ミドルウェアのメソッドが戻ってくると、実行プロセスがそれらを通り抜けます。たとえば、キャッシュミドルウェアの残りのロジックは、後の検索のためにページの内容をキャッシュします。

ミドルウェアの実装

カスタムミドルウェアを実装する方法を理解するには、上記のキャッシュミドルウェアとして使用できるコードを見てみましょう。実際、基本的なスリムミドルウェアコンポーネントを実装する要件はほとんどありません。クラスを拡張し、

メソッドをオーバーライドするクラスを作成するだけです。ミドルウェアのエントリポイントは、このSlimMiddlewareメソッドであり、そこから戻る(実行プロセスを中断する)か、次のレイヤーを呼び出すことができます。 call()

<?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);
    }

}
ログイン後にコピー

call()メソッド最初に、コンテンツがキャッシュで使用できるかどうかを確認します。もしそうなら、それは応答のContent-Typeヘッダーとボディを設定してから戻り、パイプラインを短縮します。キャッシュが逃した場合は、$this->next->call()に電話して次のミドルウェアレイヤーを呼び出します。プロセスが他のミドルウェア呼び出しからこの時点に戻ると、要求ステータスが迅速にチェックされ、将来の検索のために関連するデータがキャッシュされます。このクラスはSlimのクラスを拡張しているため、SlimアプリケーションのインスタンスにMiddlewareを介してアクセスできるため、応答と要求オブジェクトに間接的にアクセスできます。応答を配列として扱うことにより、応答のヘッダーに影響を与え、その$this->appメソッドを介して応答の本体に影響を与えることができます。 body()およびfetch()メソッドは保護されたヘルパーメソッドであり、データベースクエリをラップしてコンテンツを見つけて持続するだけです。例を完了するためだけにここにそれらを含めました。列save()cachekeyを備えたcontent_typeという名前のテーブルがあると想定しています。ニーズに応じて、持続メカニズムは異なる場合があります。また、(簡単にするために)有効期限が切れたキャッシュはここには示されていませんが、簡単に自分でマージできます。 body

ミドルウェアの登録と構成 メソッドを使用してミドルウェアを登録します。

add()

もちろん、複数のミドルウェアを後続の呼び出し
<?php require_once "../vendor/autoload.php";

$app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
ログイン後にコピー
メソッドから登録できます。新しいミドルウェアは以前に追加されたミドルウェアを囲むため、これはコールの反対の順序で追加する必要があることを意味します。

add() 上記の例では、

ミドルウェアはスリムアプリケーションをラップし、
<?php $app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
$app->add(new MyMiddlewareAuth($db));
// ...
ログイン後にコピー
ミドルウェアは

をラップします。 Cacheが呼び出されると、実行プロセスは上記の図に示されているものと類似しており、最初に認証ミドルウェアに入力し、次にルートまでずっと作業します。ミドルウェアの構成は、通常、サービスコンストラクターを介して行われます。この例では、キャッシュテーブルにアクセスできるようにアクティブなデータベース接続を渡すだけですが、動作をカスタマイズするために必要な情報を受け入れるためにクラスを書くことができます。たとえば、コンポーネントは、AuthおよびCacheメソッドを公開するハンドラーオブジェクトを受け入れることができます。コンポーネント構成の一部として機能を提供します。 $app->run() fetch()save()結論

ミドルウェアは、スリムアプリケーションのあらゆる側面を実装するためのエレガントなソリューションであることがわかりました。この記事では、ミドルウェアアーキテクチャがどのように機能し、独自のミドルウェアを実装するために必要なことを説明します。 CSRF保護やHTTP認証などの基本的なミドルウェアの例を備えた小さな追加リポジトリがあります。ここでこの例をリファクタリングし、プルリクエストを送信したので、有用なミドルウェアサービスを書いた場合、他の人もそれから利益を得られるようにプロジェクトに送信することを検討してみませんか?

(フォトリアからの写真)

(以下はFAQであり、元のコンテンツに従って調整および補足されており、いくつかの重複したコンテンツが合理化されています)

スリムミドルウェアに関する

faqs

  • スリムミドルウェアとは何ですか?なぜそれが重要なのですか?

    Slim Middlewareは、HTTPリクエストと応答を操作できるスリムフレームワークの強力なツールです。スリムアプリケーションの前後にコードを実行する方法を提供して、着信要求または発信応答を変更する方法を提供するため、重要です。これは、認証、キャッシュ、ロギングなどのさまざまな目的に使用できます。

    を実装するクラスを定義することが含まれます。このクラスには、
  • および

    を受信すると呼ばれるメソッドが必要です。 メソッドは、リクエストと応答を操作できる場所です。 MiddlewareInterface process() ServerRequestInterface RequestHandlerInterfaceprocess()スリムアプリケーションにミドルウェアを追加する方法は?

  • メソッドを使用して、スリムアプリケーションにミドルウェアを追加できます。この方法では、ミドルウェアクラスのインスタンスを受信します。ミドルウェアは追加の順序で実行されるため、最後に追加されたミドルウェアは、実行する最初のミドルウェアになります。
  • add()スリムの特定のルートにミドルウェアを使用できますか?

    はい、ミドルウェアはスリムの特定のルートに適用できます。これは、
  • オブジェクトの代わりに
  • オブジェクト上の

    メソッドを呼び出すことによって行われます。これにより、特定のルートのみに影響を与えるミドルウェアを使用できます。 Route Appadd()グローバルミドルウェアとルーティングミドルウェアの違いは何ですか?

    グローバルミドルウェアは、スリムアプリケーションによって処理された各要求に適用され、ルーティングミドルウェアは特定のルートのみに適用されます。これにより、アプリケーションのさまざまな部分に異なるミドルウェアを使用できます。
  • ミドルウェアを使用してスリムでエラー処理を実行するにはどうすればよいですか?

    ミドルウェアクラスで例外をキャッチすることにより、ミドルウェアを使用してスリムでエラー処理を実行できます。その後、応答を変更してエラーメッセージを含めるか、ユーザーをエラーページにリダイレクトできます。
  • ミドルウェアを使用してスリムでユーザーを認証できますか? はい、ミドルウェアはスリムでの認証によく使用されます。これは、有効なセッションまたはミドルウェアのトークンをチェックして実行でき、ユーザーが認証されていない場合はエラー応答を返します。

  • ミドルウェアを使用してスリムにログインする方法は? ログファイルへのリクエストと応答に関する情報を記述することにより、ミドルウェアをロギングに使用できます。これは、アプリケーションのデバッグや監視に非常に役立ちます。

  • サードパーティのミドルウェアをスリムで使用できますか? はい、Slimはサードパーティのミドルウェアをサポートしています。これは、自分のミドルウェアのようにアプリケーションに追加できます。これにより、既存のミドルウェアを活用して一般的なタスクを完了することができます。

  • スリムミドルウェアをテストする方法は? スリムミドルウェアのテストには、モックリクエストと応答を作成し、ミドルウェアに渡すことが含まれます。その後、リクエストや応答の変更や例外のスローなど、ミドルウェアが予想どおりに動作することを主張できます。

以上がPHPマスター|スリムなミドルウェアを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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