Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaedah penghuraian laluan berdasarkan ungkapan biasa dalam PHP

Kaedah penghuraian laluan berdasarkan ungkapan biasa dalam PHP

PHPz
PHPzasal
2023-10-15 13:10:561408semak imbas

Kaedah penghuraian laluan berdasarkan ungkapan biasa dalam PHP

Kaedah penghuraian laluan berasaskan ungkapan biasa dalam PHP

Dalam aplikasi berasaskan web, penghalaan (Penghalaan) ialah konsep yang sangat penting. Ia bertanggungjawab untuk memetakan permintaan pengguna kepada pengendali atau pengawal yang sepadan untuk mencapai pemaparan dan pemprosesan halaman.

Dalam PHP, kita boleh menggunakan ungkapan biasa untuk menghuraikan laluan. Ungkapan biasa ialah alat berkuasa yang boleh digunakan untuk memadankan dan mengekstrak corak rentetan tertentu.

Pertama, kita perlu menentukan jadual penghalaan (Routing Table), yang digunakan untuk menyimpan hubungan pemetaan antara laluan URL yang berbeza dan pengendali yang sepadan. Jadual laluan boleh menjadi tatasusunan, di mana kunci adalah ungkapan biasa laluan URL dan nilai adalah pengendali yang sepadan.

Sebagai contoh, kami mempunyai jadual penghalaan berikut:

$routeTable = [
    '/users/(d+)' => 'UserController@show',
    '/users' => 'UserController@index',
    '/posts/(d+)' => 'PostController@show',
    '/posts' => 'PostController@index',
    '/about' => 'PageController@about',
    '/contact' => 'PageController@contact',
];

Dalam jadual penghalaan di atas, kami telah menentukan beberapa laluan URL biasa dan pengendali yang sepadan. Ungkapan biasa digunakan untuk memadankan parameter Contohnya, /users/(d+) boleh memadankan /users/1 dan /users/2. , dsb. laluan. /users/(d+)可以匹配/users/1/users/2等路径。

接下来,我们需要编写一个路由解析函数,它负责将用户的请求路径与路由表进行匹配,从而找到对应的处理程序。

function parseRoute($routeTable, $requestPath)
{
    foreach ($routeTable as $pattern => $handler) {
        if (preg_match('~^' . $pattern . '$~', $requestPath, $matches)) {
            return [
                'handler' => $handler,
                'params' => array_slice($matches, 1)
            ];
        }
    }

    return null;
}

上面的函数中,我们使用preg_match

Seterusnya, kita perlu menulis fungsi penyelesaian laluan, yang bertanggungjawab untuk memadankan laluan permintaan pengguna dengan jadual penghalaan untuk mencari pengendali yang sepadan.

$requestPath = $_SERVER['REQUEST_URI'];

$route = parseRoute($routeTable, $requestPath);

if ($route) {
    list($controller, $action) = explode('@', $route['handler']);

    require_once 'controllers/' . $controller . '.php';

    $params = $route['params'];

    call_user_func_array([$controller, $action], $params);
} else {
    echo '404 Not Found';
}

Dalam fungsi di atas, kami menggunakan fungsi preg_match untuk memadankan ungkapan biasa. Jika perlawanan berjaya, pengendali dan parameter yang diekstrak dikembalikan jika perlawanan gagal, batal dikembalikan.

Akhir sekali, kita boleh memanggil fungsi penyelesaian laluan dalam fail kemasukan aplikasi dan melaksanakan pengendali yang sepadan.

rrreee

Dalam kod di atas, kami mula-mula mendapatkan laluan permintaan pengguna. Kemudian, panggil fungsi resolusi laluan untuk mendapatkan pengendali dan parameter yang sepadan. Akhirnya, fail pengawal dimuatkan secara dinamik, kaedah yang sepadan dilaksanakan, dan parameter diluluskan.

Perlu diingatkan bahawa contoh kod kami hanyalah kaedah penghuraian laluan asas Dalam aplikasi sebenar, fungsi lain mungkin perlu dilaksanakan, seperti perisian tengah, kumpulan penghalaan, ubah hala, dsb. #🎜🎜##🎜🎜#Ringkasnya, kaedah penghuraian laluan berdasarkan ungkapan biasa boleh membantu kami mencapai padanan dan pemprosesan laluan URL yang fleksibel. Dengan mentakrifkan jadual penghalaan dan fungsi penghuraian, kami boleh melaksanakan fungsi penghalaan dengan mudah dan mengedarkan permintaan pengguna kepada pengendali yang sepadan. #🎜🎜#

Atas ialah kandungan terperinci Kaedah penghuraian laluan berdasarkan ungkapan biasa dalam PHP. 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