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的bbs设计(三)
Oct 09 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php实现递归抓取网页类实例
Apr 03 PHP
php导出生成word的方法
Dec 25 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php表单处理操作
Nov 16 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
如何利用python查找电脑文件
2018/04/27 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
半年思想汇报
2013/12/30 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
销售辞职报告范文
2014/01/12 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
公司授权委托书范本
2014/09/18 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技