ホームページ  >  記事  >  バックエンド開発  >  php laravelリクエスト処理パイプライン(デコレータパターン)

php laravelリクエスト処理パイプライン(デコレータパターン)

angryTom
angryTom転載
2019-11-26 16:45:363286ブラウズ

Laravel のミドルウェアはデコレータ パターンを使用します。たとえば、メンテナンス モード、Cookie 暗号化、オープン セッションなどを確認します。これらの処理には、応答前と応答後の処理があり、デコレータ モードを使用して動的に機能を削減または追加することで、フレームワークのスケーラビリティが大幅に向上します。

php laravelリクエスト処理パイプライン(デコレータパターン)

#次に、デコレータ パターンを使用してセッション実装を維持する簡単な例を示します。

1. デコレータ モードは使用されないため、モジュール (WelcomeController::index メソッド) を変更する必要があります。

class WelcomeController
{
    public function index()
    {
        echo 'session start.', PHP_EOL;
        echo 'hello!', PHP_EOL;
        echo 'session close.', PHP_EOL;
    }
}

2. デコレータ モードを使用し、$pipeList は実行する必要があるミドルウェア配列を表します。鍵となるのは、array_reduce 関数の使用です。

class WelcomeController
{
    public function index()
    {
        echo 'hello!', PHP_EOL;
    }
}
interface Middleware
{
    public function handle(Closure $next);
}
class Seesion implements Middleware
{
    public function handle(Closure $next)
    {
        echo 'session start.', PHP_EOL;
        $next();
        echo 'session close.', PHP_EOL;
    }
}
$pipeList = [
    "Seesion",
];
 
function _go($step, $className)
{
    return function () use ($step, $className) {
        $o = new $className();
        return $o->handle($step);
    };
}
 
$go = array_reduce($pipeList, '_go', function () {
    return call_user_func([new WelcomeController(), 'index']);
});
$go();

PHP 関連の知識については、PHP 中国語 Web サイトをご覧ください。

以上がphp laravelリクエスト処理パイプライン(デコレータパターン)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。