PHP URL路由類實例
前段時間寫了個關(guān)于手機應(yīng)用的api,一直是用的query_string這種地址,而且還是根據(jù)一個act參數(shù)來區(qū)分所有的動作,這種讓開發(fā)人員看起來比較費眼。本來想改寫為“?c=controller&m=method&type=3&id=1” 這種形式,利用m參數(shù)來載入文件并進(jìn)行實例化,后來看了sina weibo api 是對地址進(jìn)行了路由。也決定跟風(fēng)對地址路由。本來CI框架自己自帶路由效果,但是因為考慮是寫api,想寫的比較純粹一點。
支持默認(rèn)控制器(index)和方法(index):
index.php
index.php/controller
index.php/controller/method
index.php/controller/method/prarme1/value1
index.php/controller/method/param1/value1/param2/value2.....
具體類如下:
<?phpdefine('MODULE_DIR', './classes/');
$APP_PATH= str_replace($_SERVER['DOCUMENT_ROOT'], '', __FILE__);
$SE_STRING=str_replace($APP_PATH, '', $_SERVER['REQUEST_URI']); //計算出index.php后面的字段 index.php/controller/methon/id/3
$SE_STRING=trim($SE_STRING,'/');
//echo $SE_STRING.'<br>';
//這里需要對$SE_STRING進(jìn)行過濾處理。
$ary_url=array(
'controller'=>'index',
'method'=>'index',
'pramers'=>array()
);
//var_dump($ary_url);
$ary_se=explode('/', $SE_STRING);
$se_count=count($ary_se);
//路由控制
if($se_count==1 and $ary_se[0]!='' ){
$ary_url['controller']=$ary_se[0];
}else if($se_count>1){//計算后面的參數(shù),key-value
$ary_url['controller']=$ary_se[0];
$ary_url['method']=$ary_se[1];
if($se_count>2 and $se_count%2!=0){ //沒有形成key-value形式
die('參數(shù)錯誤');
}else{
for($i=2;$i < $se_count;$i=$i+2){
$ary_kv_hash=array(strtolower($ary_se[$i])=>$ary_se[$i+1]);
$ary_url[pramers]=array_merge($ary_url[pramers],$ary_kv_hash);
}
}
}
$module_name=$ary_url['controller'];
$module_file=MODULE_DIR.$module_name.'.class.php';
//echo $module_file;
$method_name=$ary_url['method'];
if(file_exists($module_file)){
include($module_file);
$obj_module=new $module_name(); //實例化模塊m
if(!method_exists($obj_module, $method_name)){
die('方法不存在');
}else{
if(is_callable(array($obj_module, $method_name))){ //該方法是否能被調(diào)用
//var_dump($ary_url[pramers]);
$get_return=$obj_module->$method_name($ary_url[pramers]); //執(zhí)行a方法,并把key-value參數(shù)的數(shù)組傳過去
if(!is_null($get_return)){ //返回值不為空
var_dump($get_return);
}
}else{
die('該方法不能被調(diào)用');
}
}
}
else
{
die('模塊文件不存在');
}
?>
- PHP從零開始打造自己的MVC框架之類的自動加載實現(xiàn)方法詳解
- PHP從零開始打造自己的MVC框架之入口文件實現(xiàn)方法詳解
- php打造屬于自己的MVC框架
- PHP的MVC模式實現(xiàn)原理分析(一相簡單的MVC框架范例)
- php實現(xiàn)最簡單的MVC框架實例教程
- php實現(xiàn)簡單的MVC框架實例
- 搭建自己的PHP MVC框架詳解
- PHP簡單的MVC框架實現(xiàn)方法
- PHP MVC框架路由學(xué)習(xí)筆記
- PHP仿tp實現(xiàn)mvc框架基本設(shè)計思路與實現(xiàn)方法分析
- php編寫一個簡單的路由類
- PHP從零開始打造自己的MVC框架之路由類實現(xiàn)方法分析
相關(guān)文章
CI框架實現(xiàn)創(chuàng)建自定義類庫的方法
這篇文章主要介紹了CI框架實現(xiàn)創(chuàng)建自定義類庫的方法,結(jié)合實例形式分析了CI框架創(chuàng)建自定義類庫的相關(guān)原理、步驟、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2018-12-12
Yii框架參數(shù)化查詢中IN查詢只能查詢一個的解決方法
這篇文章主要介紹了Yii框架參數(shù)化查詢中IN查詢只能查詢一個的解決方法,結(jié)合實例形式分析了Yii框架中IN查詢只能查一個的原因及FIND_IN_SET函數(shù)相關(guān)功能與使用技巧,需要的朋友可以參考下2017-05-05
2個自定義的PHP in_array 函數(shù),解決大量數(shù)據(jù)判斷in_array的效率問題
大家可能都用過in_array來判斷一個數(shù)據(jù)是否在一個數(shù)組中,一般我們的數(shù)組可能數(shù)據(jù)都比較小,對性能沒什么影響,所以也就不會太在意2014-04-04
Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作示例
這篇文章主要介紹了Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作,結(jié)合實例形式分析了Yii框架連接數(shù)據(jù)庫與CURD增刪改查等常見操作技巧,需要的朋友可以參考下2019-09-09
實現(xiàn)php加速的eAccelerator dll支持文件打包下載
實現(xiàn)php加速的eAccelerator dll支持文件打包下載...2007-09-09

