Maison >développement back-end >Problème PHP >Comment implémenter la fonction de distribution de routage d'URL en php

Comment implémenter la fonction de distribution de routage d'URL en php

coldplay.xixi
coldplay.xixioriginal
2020-08-29 14:02:002502parcourir

Comment PHP implémente la fonction de distribution de route d'url : Tout d'abord, interceptez le chemin [/router/] dans la configuration du serveur ; puis implémentez le distributeur de route et obtenez l'URI demandé et enfin écrivez le module ;

Comment implémenter la fonction de distribution de routage d'URL en php

[Recommandations d'apprentissage associées : Tutoriel graphique php]

Comment implémenter la fonction de distribution de route d'url en PHP :

La première étape consiste à intercepter le chemin /router/ dans la configuration du serveur

Comment implémenter la fonction de distribution de routage dURL en php

Appelez la page index.php dans un certain répertoire de dossiers. On suppose que tous les modules sont maintenant stockés dans des fichiers séparés dans le répertoire de classe, qui se trouve au même niveau. comme le niveau du routeur, comme le montre la figure ci-dessous :

Comment implémenter la fonction de distribution de routage dURL en php

La deuxième étape est la mise en œuvre du distributeur de routes (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>

Récupérez l'uri demandé, puis obtenez Allez au nom du module à charger, au nom de la méthode appelante, et faites un jugement simple sur les paramètres de l'uri...

La troisième étape consiste à écrire le module

Selon l'uri ci-dessus, ce que nous voulons appeler est la méthode routeur sous le module Hello, puis nous pouvons définir un fichier nommé Hello.class.php dans le répertoire de la classe (notez que Linux est sensible à la casse)

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

De même, nous pouvons écrire le module Ha..

Cela peut être considéré comme réalisant une fonction de distribution de routage d'URL très simple. ..

Recommandations d'apprentissage associées : programmation php( Vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn