Home > Backend Development > PHP Problem > How to implement url routing distribution function in php

How to implement url routing distribution function in php

coldplay.xixi
Release: 2023-03-05 13:18:01
Original
2521 people have browsed it

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.

How to implement url routing distribution function in php

[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

How to implement url routing distribution function in php

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:

How to implement url routing distribution function in php

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[&#39;DOCUMENT_ROOT&#39;];
 $_FilePath = __FILE__;
 $_RequestUri = $_SERVER[&#39;REQUEST_URI&#39;]; 
 $_AppPath = str_replace($_DocumentPath, &#39;&#39;, $_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(&#39;/^\/&#39;.$p.&#39;\//&#39;, &#39;/&#39;, $_UrlPath, 1);
   }
 }
 
 $_UrlPath = preg_replace(&#39;/^\//&#39;, &#39;&#39;, $_UrlPath, 1);
 
 $_AppPathArr = explode("/", $_UrlPath);
 $_AppPathArr_Count = count($_AppPathArr);
 
 $arr_url = array(
  &#39;controller&#39; => &#39;index&#39;,
   &#39;method&#39; => &#39;index&#39;,
   &#39;parms&#39; => array()
 );
 
 $arr_url[&#39;controller&#39;] = $_AppPathArr[0];
 $arr_url[&#39;method&#39;] = $_AppPathArr[1];
 
 if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) {
   die(&#39;参数错误&#39;);
 } else {
   for ($i = 2; $i < $_AppPathArr_Count; $i += 2) {
     $arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]);
     $arr_url[&#39;parms&#39;] = array_merge($arr_url[&#39;parms&#39;], $arr_temp_hash);
   }
 }
 
 $module_name = $arr_url[&#39;controller&#39;];
 $module_file = MODULE_DIR.$module_name.&#39;.class.php&#39;;
 $method_name = $arr_url[&#39;method&#39;];
 
 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[&#39;parms&#39;]);
       
       $obj_module -> printResult();
     }
   }
   
 } else {
   die("定义的模块不存在");
 }
  
 ?>
 
</body>
 </html>
Copy after login

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>";
  }
 }
 ?>
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template