Home > Article > Backend Development > How to implement url routing distribution function in php
How PHP implements the url route distribution function: First, intercept the [/router/] path in the server configuration; then implement the route distributor and obtain the requested URI; and finally write the module.
[Related learning recommendations: php graphic tutorial]
How to implement url routing distribution function in php:
The first step is to configure /router/
in the server configuration. Path to intercept
Call the index.php
page in a certain folder directory. It is assumed that all modules now use separate The file is stored in the class directory, which is at the same level as the router, as shown in the following figure:
The second step is the implementation of the routing distributor (index.php)
<!Doctype html> <html> <head> <title>路由测试~~</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php date_default_timezone_set("Asia/Shanghai"); define("MODULE_DIR", "../class/"); $_DocumentPath = $_SERVER['DOCUMENT_ROOT']; $_FilePath = __FILE__; $_RequestUri = $_SERVER['REQUEST_URI']; $_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\router\index.php $_UrlPath = $_RequestUri; //==>/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http: $_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath); /** * http://192.168.0.33/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http: * * /hello/router/a/b/c/d/abc/index.html?id=3&url=http: */ for ($i = 0; $i < count($_AppPathArr); $i++) { $p = $_AppPathArr[$i]; if ($p) { $_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1); } } $_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1); $_AppPathArr = explode("/", $_UrlPath); $_AppPathArr_Count = count($_AppPathArr); $arr_url = array( 'controller' => 'index', 'method' => 'index', 'parms' => array() ); $arr_url['controller'] = $_AppPathArr[0]; $arr_url['method'] = $_AppPathArr[1]; if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) { die('参数错误'); } else { for ($i = 2; $i < $_AppPathArr_Count; $i += 2) { $arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]); $arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash); } } $module_name = $arr_url['controller']; $module_file = MODULE_DIR.$module_name.'.class.php'; $method_name = $arr_url['method']; if (file_exists($module_file)) { include $module_file; $obj_module = new $module_name(); if (!method_exists($obj_module, $method_name)) { die("要调用的方法不存在"); } else { if (is_callable(array($obj_module, $method_name))) { $obj_module -> $method_name($module_name, $arr_url['parms']); $obj_module -> printResult(); } } } else { die("定义的模块不存在"); } ?> </body> </html>
Get the requested uri, then get the module name to be loaded, the calling method name, and make a simple judgment on the uri parameters..
The third step, the module Write
According to the above uri, what we want to call is the router method under the Hello module, then we can define a file named Hello.class.php in the class directory (note that Linux is case-sensitive )
<?php class Hello { private $_name; private $_varValue; function __construct() { } function router() { $this->_name = func_get_arg(0); $this->_varValue = func_get_arg(1); } function printResult() { echo $this->_name; echo "<p>"; echo var_dump($this->_varValue); echo "</p>"; } } ?>
Similarly, we can write the Ha module..
This can be regarded as realizing a very simple url routing distribution function...
Related Learning recommendation: php programming (video)
The above is the detailed content of How to implement url routing distribution function in php. For more information, please follow other related articles on the PHP Chinese website!