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.
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.
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.
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');
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.
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.
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; }
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.
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.
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(); } } }
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(); } } }
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!