首頁  >  文章  >  後端開發  >  中介軟體簡介

中介軟體簡介

WBOY
WBOY原創
2024-07-18 16:59:52536瀏覽

Intro to Middleware

什麼是中間件?

中間件是一種軟體設計模式,可實現不同系統、應用程式或服務之間的無縫通訊和資料交換。它在促進不同組件之間的交互、添加功能和增強整體系統性能方面發揮著至關重要的作用。

問題

在我們先前的專案中,我們遇到了一個問題,即已登入的使用者在造訪註冊頁面時被要求重新註冊。這是由於缺乏中間件實現,導致用戶體驗不佳。

PHP 中介軟體

在PHP中,中介軟體可用於處理使用者註冊和登入功能,確保流暢的使用者體驗。中間件充當不同組件之間的橋樑,實現無縫通訊和資料交換。

if ($_SESSION['user'] ?? false){ 
    header('location: /'); 
    exit(); 
}

它檢查使用者是否登入。如果沒有,則退出腳本以查找經過身份驗證的使用者。

路由配置

在routes.php檔案中,我們可以在路由中新增一個「guest」鍵,將其與中間件關聯起來:

$router->get('/register', 'controllers/registration/create.php')->only('guest');

除錯唯一方法

要檢查項目是否如預期運作,可以在唯一方法中加入偵錯語句:

public function only($key){ 
    dd($key); 
}

它顯示錯誤,因為唯一的方法不能使用 null 值,因為它與 get 方法關聯並且不傳回任何值。所以我們必須重寫這個方法。

重寫Add方法

要將所有值傳回唯一的方法,我們需要將 router.php 檔案中的 add 方法重寫為:

public function add($method, $uri, $controller) 
{ 
    $this->routes[] = [ 
        'uri' => $uri, 
        'controller' => $controller, 
        'method' => $method, 
        'middleware'=>null 
    ]; 
    return $this; 
}

現在我們可以看到該專案運作良好。

唯一方法

router.php 檔案中唯一需要修改的方法來接受中介軟體金鑰:

public function only($key){ 
    $this->routes[array_key_last($this->routes)]['middleware']=$key; 
    return $this; 
}

中介軟體檢查

在create.php檔案中,我們可以使用中間件檢查使用者是否已登入或訪客:

if ($route['middleware']==='guest'){ 
    if($_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
} 
if ($route['middleware']==='auth'){ 
    if(! $_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
}

只有經過驗證的使用者才能存取所有頁面,而訪客只能存取有限的頁面。

建立中介軟體目錄

要組織我們的中間件類,請在核心資料夾中建立一個名為 Middleware 的新目錄。因為我們必須在某個時刻做出改變才能放鬆,以節省我們的精力和時間。透過這個我們可以使我們的專案更容易理解。在此建立 3 個不同的類別。

認證中介軟體

Authenticated.php 檔案檢查使用者是否已登錄,如果為 true,則會重新導向至首頁:

<?php namespace Core\Middleware; 
class Authenticated { 
    public function handle() { 
        if (! $_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}

訪客中介軟體

Guest.php 檔案檢查使用者是否未登錄,如果為 true,則重新導向至首頁:

<?php namespace Core\Middleware; 
class Guest { 
    public function handle() { 
        if ($_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}

中介軟體類

Middleware.php 檔案使用 MAP 常數將中間件鍵對應到各自的類別。也檢查中間件是否存在。如果沒有,則向使用者顯示未捕獲的異常以在項目中添加中間件:

<?php namespace Core\Middleware; 
class Middleware { 
    public const MAP = [ 
        'guest' => Guest::class, 
        'auth' => Authenticated::class 
    ]; 
    public static function resolve($key) { 
        if (!$key) { 
            return; 
        } 
        $middleware = static::MAP[$key] ?? false; 
        if (!$middleware) { 
            throw new \Exception("No matching middleware found for key '{$key}'."); 
        } 
        (new $middleware)->handle(); 
    } 
}

現在我們可以看到,透過進行這些更改,我們的專案運作良好。

希望您已經清楚地理解了。

以上是中介軟體簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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