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 相关文章推荐
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 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
数据库的日期格式转换
2006/10/09 PHP
PHP文件操作方法汇总
2015/07/01 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
jqTransform美化表单
2015/10/10 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Python多进程编程常用方法解析
2020/03/26 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
《桃林那间小木屋》教学反思
2014/05/01 职场文书
公司承诺书格式
2014/05/21 职场文书
公司年底活动方案
2014/08/17 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
单位实习介绍信
2015/05/05 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python