当前位置:首页 > PHP教程 > php应用 > 列表

PHP简单实现路由Route功能

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-10 08:56:41 浏览: 评论:0 

对于由原生PHP写成的独立PHP框架,利用单一入口文件实现路径的访问。这时我们会遇到的首要问题是:文件的相互包含,其次就是路由分配。当我们不利用成熟的PHP框架进行web开发时,我们就会发现上述两个问题会是很困扰我们的问题所在。

问题解决方案:

1、文件包含

php的文件包含有两种方式:require和include,两个方法的区别在于利用require包含文件当出错时,会报出严重错误,同时PHP脚本会停止运行;而利用include包含文件出错时,会有警告,但PHP脚本仍然会继续向下执行。同时两个方法都包含对应的xxx_once方法,可以避免”declare class”的问题。所以一般使用文件包含的时候我们尽量使用include_once包含文件。

同时在关于文件包含的路径问题上,我们可以利用设置全局变量的方式,依托入口文件的绝对路径,去寻找其他路径文件。修改php.ini中的inclue_path路径当然也是另一种方式,利用require和include包含文件,假如是相对路径的方式,首先会根据php.ini配置文件中的include_path的设置寻找。

2、路由分配

基于php的路由分配,实质上来说就是利用url中的path去匹配对应的控制类,同时调用其中的方法进行相关操作的处理。

一言不合上代码:

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Author:helen 
  6.  
  7.  * CreateTime: 2016/07/27 10:26 
  8.  
  9.  * Description: 
  10.  
  11.  */ 
  12.  
  13. // 权限控制 
  14.  
  15. include_once './auth.php'
  16.  
  17. // 应用入口文件 
  18.  
  19. date_default_timezone_set("Asia/Shanghai"); 
  20.  
  21. header('Content-type: text/html;charset=utf-8'); 
  22.  
  23. // 项目根路径 
  24.  
  25. define('BASEPATH', dirname(__FILE__)); 
  26.  
  27. // 调试模式 
  28.  
  29. define('APP_DEBUG', True); 
  30.  
  31. // 引入配置文件 
  32.  
  33. include_once BASEPATH . '/config/config.php'
  34.  
  35. // 路由控制 
  36.  
  37. $router = include_once BASEPATH . '/config/router.php'
  38.  
  39. if ($_SERVER['HTTP_HOST'] !== 'xxx.com') { 
  40.  
  41.     var_dump('当前host不被允许'); 
  42.  
  43. else { 
  44.  
  45.     $request_path = str_replace('/index.php'''$_SERVER['PHP_SELF']); 
  46.  
  47.     $request_query = getCurrentQuery(); 
  48.  
  49.     if (array_key_exists($request_path$router)) { 
  50.  
  51.         $module_file = BASEPATH . $router[$request_path]['file_name']; 
  52.  
  53.         $class_name = $router[$request_path]['class_name']; 
  54.  
  55.         $method_name = $router[$request_path]['method_name']; 
  56.  
  57.         if (file_exists($module_file)) { 
  58.  
  59.             include $module_file
  60.  
  61.             $obj_module = new $class_name(); 
  62.  
  63.             if (!method_exists($obj_module$method_name)) { 
  64.  
  65.                 die("要调用的方法不存在"); 
  66.  
  67.             } else { 
  68.  
  69.                 if (is_callable(array($obj_module$method_name))) { 
  70.  
  71.                     $obj_module->$method_name($request_query$_POST); 
  72.  
  73.                 } 
  74.  
  75.             } 
  76.  
  77.         } else { 
  78.  
  79.             die("定义的模块不存在"); 
  80.  
  81.         } 
  82.  
  83.     } else { 
  84.  
  85.         echo '页面不存在'
  86.  
  87.     } 
  88.  

利用上述方式就可实现基本的PHP框架的路由分配。

Tags: Route

分享到: