Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengenalan kepada Middleware

Pengenalan kepada Middleware

WBOY
WBOYasal
2024-07-18 16:59:52537semak imbas

Intro to Middleware

Apakah Middleware?

Perisian tengah ialah corak reka bentuk perisian yang membolehkan komunikasi lancar dan pertukaran data antara sistem, aplikasi atau perkhidmatan yang berbeza. Ia memainkan peranan penting dalam memudahkan interaksi antara komponen yang berbeza, menambah fungsi dan meningkatkan prestasi sistem keseluruhan.

Masalahnya

Dalam projek kami sebelum ini, kami menghadapi isu di mana pengguna log masuk diminta mendaftar semula apabila melawat halaman pendaftaran. Ini disebabkan oleh kekurangan pelaksanaan perisian tengah, yang mengakibatkan pengalaman pengguna yang lemah.

Middleware dalam PHP

Dalam PHP, perisian tengah boleh digunakan untuk mengendalikan pendaftaran pengguna dan fungsi log masuk, memastikan pengalaman pengguna yang lancar. Middleware bertindak sebagai jambatan antara komponen yang berbeza, membolehkan komunikasi lancar dan pertukaran data.

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

Ia menyemak sama ada pengguna telah log masuk atau tidak. Jika tidak, keluar dari skrip untuk mencari pengguna yang disahkan.

Konfigurasi Laluan

Dalam fail routes.php, kami boleh menambah kunci 'tetamu' pada laluan untuk mengaitkannya dengan perisian tengah:

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

Menyahpepijat Satu-satunya Kaedah

Untuk menyemak sama ada projek berfungsi seperti yang diharapkan, anda boleh menambah pernyataan nyahpepijat dalam satu-satunya kaedah:

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

Ia menunjukkan ralat kerana satu-satunya kaedah tidak boleh berfungsi dengan nilai nol kerana ia dikaitkan dengan kaedah get dan ia tidak mengembalikan sebarang nilai. Jadi kita perlu menulis semula kaedah.

Menulis semula Kaedah Tambah

Untuk mengembalikan semua nilai kepada satu-satunya kaedah, kita perlu menulis semula kaedah tambah dalam fail router.php sebagai:

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

Kini kita dapat melihat projek itu berfungsi dengan baik.

Hanya Kaedah

Satu-satunya kaedah dalam fail router.php perlu diubah suai untuk menerima kunci middleware:

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

Pemeriksaan Middleware

Dalam fail create.php, kami boleh menyemak sama ada pengguna log masuk atau tetamu menggunakan middleware:

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

Hanya pengguna yang disahkan boleh mempunyai akses kepada semua halaman manakala tetamu boleh mengakses satu-satunya halaman terhad.

Mencipta Direktori Middleware

Untuk mengatur kelas middleware kami, buat direktori baharu dalam folder teras bernama Middleware. Memandangkan kita perlu membuat perubahan pada satu ketika untuk berehat kita, untuk menjimatkan usaha dan masa kita. Dengan ini kami boleh menjadikan projek kami lebih mudah difahami. Dalam ini buat 3 kelas berbeza.

Auth Middleware

Fail Authenticated.php menyemak sama ada pengguna telah log masuk dan mengubah hala ke halaman utama jika benar:

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

Perisian Tengah Tetamu

Fail Guest.php menyemak sama ada pengguna tidak log masuk dan mengubah hala ke halaman utama jika benar:

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

Kelas Middleware

Fail Middleware.php menggunakan pemalar MAP untuk memetakan kunci middleware ke kelas masing-masing. Juga menyemak sama ada middleware wujud atau tidak. Jika tidak, tunjukkan pengecualian yang tidak ditangkap kepada pengguna untuk menambah perisian tengah dalam projek:

<?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(); 
    } 
}

Kini kami dapat melihat bahawa dengan membuat perubahan ini projek kami berfungsi dengan baik.

Saya harap anda telah memahaminya dengan jelas.

Atas ialah kandungan terperinci Pengenalan kepada Middleware. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn