中間件提供了一種方便的機制來檢查和過濾進入應用程式的 HTTP 請求。 例如,Lithe 包含用於檢查使用者是否經過驗證的中間件。如果沒有,中間件會將使用者重新導向到登入畫面。如果使用者通過身份驗證,中間件將允許請求繼續進行。
在 Lithe 中,中間件是可以存取請求物件 ($req)、回應物件 ($res) 和應用程式請求-回應週期中的 $next 函數的函數。 $next 函數在呼叫時會呼叫目前堆疊中的下一個中間件。
中間件函數提供了一個方便的方法來檢查、過濾和操作應用程式傳入的 HTTP 請求。他們可以:
如果目前中間件沒有終止請求-回應週期,則必須呼叫 $next() 將控制權傳遞給下一個中間件。否則,請求將保持待處理狀態。
以下程式碼示範了中間件函數的元素:
$app->use(function ($req, $res, $next) { $next(); });
地點:
這是一個名為 myLogger 的中間件的簡單範例。每次請求通過該中間件時,該中間件都會列印訊息 LOGGED。它被定義為指派給名為 myLogger 的變數的函數:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
注意上面的 $next() 呼叫。此函數呼叫應用程式中的下一個中間件。 $next() 不是內建的 PHP 或 Lithe 函數,而是傳遞給中間件函數的第三個參數。儘管 $next() 可以命名為任何名稱,但按照慣例,它始終稱為「next」。為了避免混淆,請遵守此約定。
將中間件想像為 HTTP 請求在到達應用程式之前經過的一系列「層」。每層都可以檢查或拒絕請求。
要載入中間件,請呼叫 LitheApp 類別的 use() 方法,並指定中間件函數。例如:
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
每當應用程式收到請求時,都會列印訊息「LOGGED」。中間件載入的順序很重要:先載入的先執行。
myLogger 中間件只是列印一則訊息,然後使用 $next() 將請求傳遞給下一個中間件。
Lithe 應用程式可以使用以下類型的中間件:
您可以使用 use() 或 METHOD() 方法將應用程式級中間件附加到應用程式的實例,其中 METHOD 指小寫的 HTTP 方法(例如 GET、PUT、POST)。
此範例顯示沒有路徑的中間件。每次收到請求時中間件都會運作:
$app->use(function ($req, $res, $next) { $next(); });
在下面的範例中,中間件處理對路徑 /user/:id:
的 GET 請求
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
路由器級中間件的工作方式類似於應用程式級中間件,但附加到 LitheHttpRouter 的實例:
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
您可以使用 use() 和 METHOD() 函數來載入路由器級中間件。
這是路由器級中間件的範例:
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
您可以使用第三方中間件為您的 Lithe 應用程式添加功能。安裝所需的 PHP 模組,然後在應用程式或路由器層級載入它。
這是使用 LitheMiddlewareSessionsession 載入會話中間件的範例:
$app->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { return $next(); } $res->send('ID is not 0'); }, function ($req, $res) { $res->send('regular'); });
有關 Lithe 常用的第三方中間件列表,請查看第三方中間件資源。
如果您需要可配置中間件,您可以建立一個函數,該函數接受一組選項或其他參數,然後根據這些參數傳回中間件實作。請參閱下面的範例:
$router = new \Lithe\Http\Router;
現在,您可以使用具有自訂配置的中間件:
$router = new \Lithe\Http\Router; $router->use(function ($req, $res, $next) { echo 'Time: ', Date('H:i:s'), '<br>'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { $res->redirect('/'); } $next(); }, function ($req, $res) { echo $req->param('id'); $res->render('special'); }); $app->use('/api', $router);
要建立其他開發人員可以透過 Composer 安裝的中間件,有一個名為 lithemod/flow 的套件。它提供了用於在 Lithe 中處理 HTTP 請求和回應的介面和實用程序,這有助於跨各種應用程式建立標準化且隨時可用的中間件。
lithemod/flow 透過為請求和回應提供統一的介面來幫助建立強大的中間件,使開發更加高效和有組織。這簡化了中間件與其他項目的集成,並確保程式碼遵循一致的標準。
以上是Lithe 中的中間件:它是如何運作的以及如何創建自己的中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!