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 相关文章推荐
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
laravel 数据验证规则详解
Oct 23 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
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
原生JS轮播图插件
2017/02/09 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
python监测当前联网状态并连接的实例
2018/12/18 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
数据库专业英语
2012/11/30 面试题
高一化学教学反思
2014/02/05 职场文书
趣味运动会广播稿
2014/09/13 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
Java中的随机数Random
2022/03/17 Java/Android