中間件Middleware:
包裹在應用外面的「層」(就像洋蔥那樣),用戶請求需要經過定義在路由之上的中間件按照順序層層處理後才交由應用程序處理,應用程序執行用戶操作後再層層返回最終回覆用戶。
中間件通常屬於同樣使用業務邏輯層的應用。
它們是橫跨整個應用程序的組件,用於處理共享的功能和邏輯。
例如:身份驗證、權限檢查、日誌記錄、輸入驗證等。
中間件可以在控制器之前(Before)或之後執行(After),並允許你對請求進行前置處理或後置處理。
全域中間件、路由中間件
功能類似控制器:
在中間件中,你可以訪問業務邏輯層(BLL)的功能,以執行相關的操作。
這些操作可能包括從數據庫檢索數據(DLL)、調用第三方服務(PKG)。
由於中間件是獨立於控制器的組件,它們可以應用於整個應用程序的不同部分,以確保共享的功能和邏輯得到一致地應用。
這樣可以提高代碼的可重用性和可維護性,同時還能保持業務邏輯層的統一性。
因此,中間件是一個獨立應用和業務邏輯層的共同應用,它們通常用於實現共享的功能和處理請求的相關操作。
完整的中間件一般會包括以下幾個方法:
構造函數:用於初始化中間件實例。
啟動方法:執行中間件的初始化操作,在實際使用之前調用。
中間件邏輯方法:用於執行中間件的具體邏輯。
結束方法:執行中間件的清理操作,在中間件不再需要時調用。
參考:https://ithelp.ithome.com.tw/articles/10192682
實作參考:https://blog.csdn.net/hjh15827475896/article/details/119874841
方法實現(使用中間件):
$middlewareArray = array();
// 中間件由外向內,放入數組中,提供後續循環遍歷。
array_unshift($middlewareArray,$this->middleware('MW1'));
array_unshift($middlewareArray,$this->middleware('MW2'));
//Applications應用程式(MVC)
$app = new Applications();
//可自訂參數內容
$request = "[我是參數內容]";
//把目標方法轉換為一個閉包方法(end)
$next = function($request) use ($app){
$app->start();
};
//遍歷:由內而外建立並執行todo方法)
foreach ($middlewareArray as $middleware) {
$next = function($request) use ($middleware,$next){
$middleware->todo($request,$next);
};
}
//執行最後一個閉包方法
$next($request);
中間件大致結構(class):
//中間件執行方法
public function todo($request = null, $next){
$this->start($request);
$next($request);//啟動下一個中間件(下一層)
$this->end($request);
}
private function start($request){
//起始方法
}
private function end($request){
//結束方法
}