php 简单路由实现

在PHP中,利用单一入口文件实现路径的访问,实现形如 http://localhost/project/index.php/module/method/param_key/param_val 的访问路由

module:模块名称(类)

method:模块方法

param_key:参数名称

param_val:参数值

一、新建项目 route

在 route 下新 index.php,代码如下

<?php 
	error_reporting(0);  
	define(DIR_CONTROLLER, 'controller/'); // 定义控制器目录
	date_default_timezone_set("Asia/Shanghai");  
	$_DocumentPath = $_SERVER['DOCUMENT_ROOT'];  
	$_RequestUri = $_SERVER['REQUEST_URI'];  
	$_UrlPath = $_RequestUri;  
	$_FilePath = __FILE__;  
	$_AppPath = str_replace($_DocumentPath, '', $_FilePath);    //==>\route\index.php  
	$_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath);  
	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'] = ucfirst($_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 = DIR_CONTROLLER.$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($arr_url['parms']);   
            }  
        }        
    } else {  
        die("定义的模块不存在");  
    }  
?>

二、在项目目录下新建 controller 文件夹,并在该文件夹下新建 Welcome.class.php 文件,代码如下

<?php 
	class Welcome{
		public function index($param){
			echo 'Hello World!';
		}
	}
?>

三、地址栏输入 http://localhost/route/index.php/welcome/index/

页面输出 “ Hello World! ”

转载于:https://my.oschina.net/u/3460260/blog/1832005

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值