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 相关文章推荐
第十一节--重载
Nov 16 PHP
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
PHP源码之explode使用说明
Aug 05 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php魔术变量用法实例详解
Nov 13 PHP
PHP中余数、取余的妙用
Jun 29 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 PHP
功能强大的php分页函数
Jul 20 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
chrome原生方法之数组
2011/11/30 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
Javascript的this详解
2019/03/23 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
python字典的常用操作方法小结
2016/05/16 Python
Python如何实现文本转语音
2016/08/08 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
行政管理人员精品工作推荐信
2013/11/04 职场文书
人力资源管理毕业生自荐信
2013/11/21 职场文书
销售会计岗位职责
2014/03/15 职场文书
大学新生入学教育方案
2014/05/16 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
写景作文评语集锦
2014/12/25 职场文书
艺术节开幕词
2015/01/28 职场文书
张丽莉观后感
2015/06/16 职场文书
三国演义读书笔记
2015/06/25 职场文书
大学生社会实践感想
2015/08/11 职场文书
中学团支部工作总结
2015/08/13 职场文书