php 簡單路由實現

在PHP中,利用單一入口文件實現路徑的訪問,實現形如 http://localhost/project/index.php/module/method/param_key/param_val 的訪問路由php

module:模塊名稱(類)url

method:模塊方法code

param_key:參數名稱路由

param_val:參數值hash

1、新建項目 routeio

在 route 下新 index.php,代碼以下function

<?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("定義的模塊不存在");  
    }  
?>

2、在項目目錄下新建 controller 文件夾,並在該文件夾下新建 Welcome.class.php 文件,代碼以下class

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

3、地址欄輸入 http://localhost/route/index.php/welcome/index/module

頁面輸出 「 Hello World! 」date

相關文章
相關標籤/搜索