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

スリムフレームワークミドルウェア:強力な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 までご連絡ください。
負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。Apr 29, 2025 am 12:42 AM

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

セッションロックの概念を説明します。セッションロックの概念を説明します。Apr 29, 2025 am 12:39 AM

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの選択肢はありますか?PHPセッションの選択肢はありますか?Apr 29, 2025 am 12:36 AM

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

PHPのコンテキストで「セッションハイジャック」という用語を定義します。PHPのコンテキストで「セッションハイジャック」という用語を定義します。Apr 29, 2025 am 12:33 AM

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

PHPの完全な形式は何ですか?PHPの完全な形式は何ですか?Apr 28, 2025 pm 04:58 PM

この記事では、PHPについて説明し、その完全なフォーム、Web開発での主要な使用、PythonとJavaとの比較、および初心者の学習のしやすさについて説明します。

PHPはフォームデータをどのように処理しますか?PHPはフォームデータをどのように処理しますか?Apr 28, 2025 pm 04:57 PM

PHPは、$ \ _ postおよび$ \ _を使用してフォームデータを処理し、検証、消毒、安全なデータベースインタラクションを通じてセキュリティを確保します。

PHPとASP.NETの違いは何ですか?PHPとASP.NETの違いは何ですか?Apr 28, 2025 pm 04:56 PM

この記事では、PHPとASP.NETを比較して、大規模なWebアプリケーション、パフォーマンスの違い、セキュリティ機能への適合性に焦点を当てています。どちらも大規模なプロジェクトでは実行可能ですが、PHPはオープンソースであり、プラットフォームに依存しませんが、ASP.NET、

PHPはケースに敏感な言語ですか?PHPはケースに敏感な言語ですか?Apr 28, 2025 pm 04:55 PM

PHPの症例感度は変化します:関数は鈍感であり、変数とクラスは感度があります。ベストプラクティスには、一貫した命名と、比較のためにケース非感受性関数を使用することが含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール