PHP中介軟體解析

來源:互聯網
上載者:User
本文主要和大家分享PHP中介軟體解析,中介軟體是一個閉包,而且返回一個閉包。中介軟體為過濾進入應用的HTTP請求提供了一套便利的機制,可以分為前置中介軟體和後置中介軟體。常用於驗證使用者是否經

過認證,添加回應標頭(跨域),記錄請求日誌等。

例子

<?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['log'] = $log;$stack['filter'] = $filter;$stack['auth'] = $auth;$run = pack_middleware($application, $stack);$run('Laravle');

輸出:

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('Laravle');

編寫規範

中介軟體要要滿足一定的規範:總是返回一個閉包,閉包中總是傳入相同的參數(由主要邏輯決定), 閉包總是返回控制代碼(handler)的執行結果;

如果中介軟體的邏輯在返回控制代碼return $handler($name)前完成,就是前置中介軟體,否則為後置中介軟體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.