Beberapa hari lalu, saya belajar membina penghala asas yang memetakan URL kepada pengawal. Sekarang, saya perlu mempertingkatkannya untuk membina penghala yang lebih baik dengan fungsi lanjutan. Untuk membina penghala yang lebih baik yang berfungsi dengan input tersembunyi, pertama sekali padam fail router.php asas daripada projek dan buat yang baharu. Mari mulakan.
Kami perlu membina penghala yang lebih baik yang memetakan URL dengan cekap kepada pengawal atau tindakan tertentu, membolehkan aplikasi kami mengendalikan permintaan dan menghalakannya kepada pengendali yang sesuai.
Keupayaan penghala yang lebih baik untuk berfungsi dengan input tersembunyi membolehkan pemadaman nota selamat dengan menghantar ID nota kepada pengawal tanpa mendedahkannya dalam URL, menghalang gangguan pengguna.
<input type="hidden" name="_method" value="DELETE">
Untuk mencipta fail penghala, kita perlu memulakan kelas Router dengan ruang nama, dalam kes ini, Teras.
<?php namespace Core; class Router { }
Memandangkan kelas penghala dibina maka kita perlu mentakrifkan fungsi awam di dalamnya dan semuanya mempunyai parameter yang sama seperti dapatkan, siarkan, padam, tampal dan letak sebagai laluan penting yang membantu tapak web kami menentukan perkara yang perlu dilakukan apabila seseorang melawat sesuatu muka surat. Fungsi ini mempunyai parameter yang sama, membolehkan mereka melakukan tindakan yang sama.
public function get($uri, $controller) { $this->add('GET', $uri, $controller); } public function post($uri, $controller) { $this->add('POST', $uri, $controller); } public function delete($uri, $controller) { $this->add('DELETE', $uri, $controller); } public function patch($uri, $controller) { $this->add('PATCH', $uri, $controller); } public function put($uri, $controller) { $this->add('PUT', $uri, $controller); }
Memandangkan semua fungsi awam mempunyai parameter yang sama maka kami menggunakan kaedah tambah dan memberikan parameter yang sama kepadanya dan hanya memanggil ini dalam fungsi lain. Ia digunakan untuk menambah laluan baharu pada peta penghalaan, mengambil tiga parameter: kaedah permintaan, corak URI untuk dipadankan dan fail pengawal untuk mengendalikan permintaan.
public function add($method, $uri, $controller) { $this->routes[] = [ 'uri' => $uri, 'controller' => $controller, 'method' => $method ]; }
Di sini, Kami mentakrifkan kaedah laluan untuk menentukan respons aplikasi kami kepada URL yang diberikan, memetakannya kepada pengawal yang sepadan untuk mengendalikan permintaan.
public function route($uri, $method) { foreach ($this->routes as $route) { if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) { return require base_path($route['controller']); } } $this->abort(); }
Kaedah laluan, Kami menggunakan fungsi strtoupper untuk menukar rentetan kepada huruf besar, memastikan padanan tidak sensitif huruf besar.
strtoupper($method)
Dalam fail router.php kami mentakrifkan kaedah batalkan sebagai jaring keselamatan, memaparkan halaman ralat jika tapak web kami tidak dapat mencari laluan yang betul.
protected function abort($code = 404) { http_response_code($code); require base_path("views/{$code}.php"); die(); }
Perkara terakhir ialah menentukan konfigurasi penghalaan dalam fail route.php, memetakan URL kepada tindakan pengawal yang sepadan.
$router->get('/', 'controllers/index.php'); $router->get('/about', 'controllers/about.php'); $router->get('/contact', 'controllers/contact.php'); $router->get('/notes', 'controllers/notes/index.php'); $router->get('/note', 'controllers/notes/show.php'); $router->get('/notes/create', 'controllers/notes/create.php');
Kaedah get menentukan kaedah permintaan(GET) , corak URL dan memetakannya ke fail pengawal.
Kesimpulannya, kami telah membina penghala yang lebih baik yang memetakan URL dengan cekap kepada kaedah pengawal tertentu, membolehkan pendekatan yang lebih berstruktur dan boleh diselenggara untuk mengendalikan permintaan serta meningkatkan prestasi keseluruhan dan kebolehskalaan tapak web kami.
Saya harap anda telah memahaminya dengan jelas.
Atas ialah kandungan terperinci Mencipta Penghala yang Lebih Baik : Mengendalikan Input TERSEMBUNYI dan permintaan DELETE. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!