Lithe 中的中間件:它是如何運作的以及如何創建自己的中間件

DDD
發布: 2024-10-25 08:33:28
原創
533 人瀏覽過

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!