ホームページ  >  記事  >  バックエンド開発  >  phpミドルウェアとは何ですか

phpミドルウェアとは何ですか

(*-*)浩
(*-*)浩オリジナル
2019-09-18 14:03:144489ブラウズ

ミドルウェアは、その名前が示すように、リクエストデータを傍受して処理し、データを検証し、リクエストとレスポンスの間の論理的な処理を経て、次のミドルウェアへのエントリを許可するかどうかを決定します。

phpミドルウェアとは何ですか

#ミドルウェアは、プレフィックスミドルウェアとポストミドルウェアに分類されます。権限の認証、ログ記録などに使用できます。

ミドルウェアは、アプリケーションに入る HTTP リクエストをフィルタリングするための便利なメカニズムを提供します。 (推奨学習: PHP プログラミングの入門から熟練度まで )

たとえば、Laravel にはユーザー認証を検証するための組み込みミドルウェアがあります。ユーザーが認証されていない場合、ミドルウェアはユーザーをログイン インターフェイスにリダイレクトします。ただし、ユーザーが認証されている場合、ミドルウェアはアプリケーションへのリクエストをさらに許可します。


もちろん、ID 認証に加えて、さまざまなタスクを実行する追加のミドルウェアを作成することもできます。

例: CORS ミドルウェアは、アプリケーションから送信されるすべての応答に適切なヘッダー情報を追加する役割を担うことができ、ロギング ミドルウェアは、アプリケーションに受信されるすべてのリクエストを記録できます。

<?php
// 框架核心应用层
$application = function($name) {
    echo "this is a {$name} application\n";
};
 
// 前置校验中间件
$auth = function($handler) {
    return function($name) use ($handler) {
        echo "{$name} need a auth middleware\n";
        return $handler($name);
    };
};
 
// 前置过滤中间件
$filter = function($handler) {
    return function($name) use ($handler) {
        echo "{$name} need a filter middleware\n";
        return $handler($name);
    };
};
 
// 后置日志中间件
$log = function($handler) {
    return function($name) use ($handler) {
        $return = $handler($name);
        echo "{$name} need a log middleware\n";
        return $return;
    };
};
 
// 中间件栈
$stack = [];
 
// 打包
function pack_middleware($handler, $stack)
{
    foreach (array_reverse($stack) as $key => $middleware) 
    {
        $handler = $middleware($handler);
    }
    return $handler;
}
 
// 注册中间件
// 这里用的都是全局中间件,实际应用时还可以为指定路由注册局部中间件
$stack[&#39;log&#39;] = $log;
$stack[&#39;filter&#39;] = $filter;
$stack[&#39;auth&#39;] = $auth;
 
$run = pack_middleware($application, $stack);
$run(&#39;Laravle&#39;);

出力:

Laravle need a filter middleware
Laravle need a auth middleware
this is a Laravle application
Laravle need a log middleware

パッケージングプログラム

ミドルウェアの実行順序が与えられます。パッケージ化関数 (pack_middleware) は、ここで返されるクロージャが実際に以下と同等であると判断します。

$run = $log($filter($auth($application)));
$run(&#39;Laravle&#39;);

仕様の記述

ミドルウェアは特定の仕様を満たす必要があります: 常に A クロージャを返します。同じパラメータが常にクロージャに渡され (メイン ロジックによって決定される)、クロージャは常にハンドラの実行結果を返します。

ミドルウェアのロジックがハンドルを返した場合は、$ が返されます。完了した場合は、 handler($name) の前の場合はプレミドルウェア、それ以外の場合はポストミドルウェアです。

以上がphpミドルウェアとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。