Pengenalan kepada Middleware

WBOY
发布: 2024-07-18 16:59:52
原创
372 人浏览过

Intro to Middleware

Apakah Middleware?

Middleware 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 secara keseluruhan.

Masalah

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 kena tulis semula kaedahnya.

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; 
}
登录后复制

Sekarang kita boleh lihat projek ini berjalan 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; 
}
登录后复制

Semakan 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.

Perisian Tengah Auth

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

登录后复制

Perisian Tengah Tetamu

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

登录后复制

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:

 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.

以上是Pengenalan kepada Middleware的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!