搜尋
首頁後端開發php教程Lithe 中的中間件:它是如何運作的以及如何創建自己的中間件

Middleware no Lithe: Como Funciona e Como Criar o Seu Próprio

中間件提供了一種方便的機制來檢查和過濾進入應用程式的 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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

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

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

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

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

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

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

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

簡單指南:帶有PHP腳本的電子郵件發送簡單指南:帶有PHP腳本的電子郵件發送May 12, 2025 am 12:02 AM

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

PHP性能:識別和修復瓶頸PHP性能:識別和修復瓶頸May 11, 2025 am 12:13 AM

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

PHP的依賴注入:快速摘要PHP的依賴注入:快速摘要May 11, 2025 am 12:09 AM

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

提高PHP性能:緩存策略和技術提高PHP性能:緩存策略和技術May 11, 2025 am 12:08 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

熱工具

SecLists

SecLists

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

SublimeText3 英文版

SublimeText3 英文版

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

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具