中間件提供了一種方便的機制來檢查和過濾進入應用程式的 HTTP 請求。例如,Lithe 包含用於檢查應用程式使用者是否經過身份驗證的中間件。如果使用者未經過驗證,中間件會將使用者重新導向至應用程式的登入畫面。但是,如果使用者經過身份驗證,中間件將允許請求在應用程式內繼續進行。
中間件在 Lithe 中的工作原理
在 Lithe 中,中間件是可以存取應用程式請求回應循環中的請求物件 ($req)、回應物件 ($res) 和 $next 函數的函數。 $next 函數是 Lithe 路由器中的一個函數,呼叫時會執行目前中間件旁的中間件。
中間件函數提供了一個方便的機制來檢查、過濾和處理進入應用程式的 HTTP 請求。
中介軟體可以執行下列任務:
- 運行任何程式碼。
- 更改請求和回應物件。
- 結束請求-回應週期。
- 呼叫堆疊中的下一個中間件。
如果目前中間件函數沒有結束請求-回應週期,則必須呼叫 $next() 將控制權傳遞給下一個中間件函數。否則,請求將被等待處理。
中介軟體功能的元素
以下程式碼顯示了中間件函數呼叫的元素:
$app->use(function ($req, $res, $next) { $next(); });
地點:
- $req:中間件函數的 HTTP 請求參數,依慣例稱為「$req」。
- $res:中間件函數的 HTTP 回應參數,依慣例稱為「$res」。
- $next:中間件函數的回呼參數,依慣例稱為「$next」。
定義中介軟體
讓我們從一個名為 myLogger 的簡單中間件範例開始。每次請求通過該中間件時,該中間件都會列印 LOGGED 訊息。中間件被定義為指派給名為 myLogger 的變數的函數:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
注意上面對 $next() 的呼叫。呼叫此函數會呼叫應用程式中的下一個中間件函數。 $next() 函數不是 PHP 或 Lithe 的一部分,但它是傳遞給中間件函數的第三個參數。 $next() 函數可以有任何名稱,但按照慣例,它總是稱為「next」。為了避免混淆,請始終使用此約定。
最好將中間件視為 HTTP 請求在到達應用程式之前必須遍歷的一系列「層」。每一層都可以檢查請求,甚至完全拒絕它。
載入中介軟體
要載入中間件函數,您可以呼叫 LitheApp 類別的 use() 方法,並指定所需的中間件函數。例如,以下程式碼在執行到根路徑(/)的路由之前載入 myLogger 中間件函數:
$app->use(function ($req, $res, $next) { $next(); });
每當應用程式收到請求時,它都會列印訊息「LOGGED」。
中間件載入順序很重要:先載入的中間件函數也會先執行。
myLogger 中間件函數只是列印一則訊息,然後透過呼叫 $next() 函數將請求傳遞給堆疊上的下一個中間件函數。
使用中介軟體
Lithe 應用程式可以使用以下類型的中間件:
- 應用級中間件
- 路由器級中間件
- 第三方中介軟體
應用層中介軟體
使用 use() 和 METHOD() 方法將應用程式級中間件綁定到應用程式物件的實例,其中 METHOD 是中間件函數處理的請求的 HTTP 方法(例如 GET、PUT 或 POST)小寫。
此範例顯示了一個沒有組譯路徑的中間件函數。每次應用程式收到請求時都會執行該函數。
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
下面的範例顯示了一個處理路徑 /user/:id 中的 GET 請求的中間件。
$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!'); });
路由器級中介軟體
路由器級中間件的工作方式與應用程式級中間件相同,只是它綁定到 LitheHttpRouter 的實例。
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
使用 USE 和 METHOD 函數載入路由器級中間件。
以下範例程式碼展示了使用路由器級中間件的中間件系統:
$app->get('/user/:id', function ($req, $res, $next) { // Se o ID do usuário for '0', passa para o próximo middleware if ($req->param('id') === '0') { return $next(); } // Caso contrário, envia uma resposta específica $res->send('ID não é 0'); }, function ($req, $res) { // Envia uma resposta quando o ID for '0' $res->send('regular'); });
第三方中介軟體
使用第三方中間件為 Lithe 應用新增功能。
安裝所需功能所需的 PHP 模組,然後在應用程式層級或路由器層級將其載入到您的應用程式中。
以下範例說明了載入會話中間件,即 LitheMiddlewareSessionsession 函式。
$router = new \Lithe\Http\Router;
Lithe 常用的第三方中間件功能的部分列表,請參閱:第三方中間件。
可配置的中介軟體
如果您需要可設定的中間件,請建立一個接受選項陣列或其他參數的函數,然後根據輸入參數傳回中間件實作。
$app->use(function ($req, $res, $next) { $next(); });
現在可以使用中間件了,如下圖所示。
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
以上是Lithe 中的中間件:它是如何運作的以及如何創建自己的中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

WebStorm Mac版
好用的JavaScript開發工具