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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
PHP4 与 MySQL 数据库操作函数详解
Dec 06 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
php变量范围介绍
Oct 15 PHP
php设置编码格式的方法
Mar 05 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
php短信接口代码
May 13 PHP
php文件上传后端处理小技巧
May 22 PHP
PHP抽象类和接口用法实例详解
Jul 20 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 验证码实例代码
2010/06/01 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
原生js图片轮播效果实现代码
2016/10/19 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
js实现验证码功能
2020/07/24 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python全局变量操作详解
2015/04/14 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
物流仓储计划书
2014/01/10 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
企业授权委托书范本
2014/04/02 职场文书
设备管理实施方案
2014/05/31 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书