PHP URL路由类实例


Posted in PHP onNovember 12, 2013

前段时间写了个关于手机应用的api,一直是用的query_string这种地址,而且还是根据一个act参数来区分所有的动作,这种让开发人员看起来比较费眼。本来想改写为“?c=controller&m=method&type=3&id=1” 这种形式,利用m参数来载入文件并进行实例化,后来看了sina weibo api 是对地址进行了路由。也决定跟风对地址路由。本来CI框架自己自带路由效果,但是因为考虑是写api,想写的比较纯粹一点。
支持默认控制器(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进行过滤处理。
$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){//计算后面的参数,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('参数错误');
    }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))){    //该方法是否能被调用
            //var_dump($ary_url[pramers]);
            $get_return=$obj_module->$method_name($ary_url[pramers]);    //执行a方法,并把key-value参数的数组传过去
            if(!is_null($get_return)){ //返回值不为空
                var_dump($get_return);
            }
        }else{
            die('该方法不能被调用');
        }
    }
}
else
{
    die('模块文件不存在');
}
?>
PHP 相关文章推荐
一个简单的MySQL数据浏览器
Oct 09 PHP
PHP版自动生成文章摘要
Jul 23 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
33道php常见面试题及答案
Jul 06 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
php实现等比例压缩图片
Jul 26 PHP
使用PHP开发留言板功能
Nov 19 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 #PHP
php inc文件使用的风险和注意事项
Nov 12 #PHP
php防止SQL注入详解及防范
Nov 12 #PHP
php session劫持和防范的方法
Nov 12 #PHP
php后门URL的防范
Nov 12 #PHP
php打开远程文件的方法和风险及解决方法
Nov 12 #PHP
php使用exec shell命令注入的方法讲解
Nov 12 #PHP
You might like
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
纯javascript版日历控件
2016/11/24 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python opencv实现图像边缘检测
2019/04/29 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python如何存储数据到json文件
2020/03/09 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
介绍一下mysql的日期和时间函数
2013/03/28 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
文员岗位职责
2013/11/09 职场文书
yy结婚证婚词
2014/01/10 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
《给予树》教学反思
2016/03/03 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS