PHP URL路由类实例_php实例

前段时间写了个关于手机应用的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('模块文件不存在');
}
?>

时间: 2024-08-01 21:10:00

PHP URL路由类实例_php实例的相关文章

php处理restful请求的路由类分享_php实例

复制代码 代码如下: <?php    class Router {        // 路由表        private $routers = array(            array("name"=>"userlist", "pattern"=>"get /user", "action"=>"User#get"),            array(

php url路由入门实例_php实例

一.什么是php的路由机制 1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数.举个例子,如:http://main.test.com/article/1  其中:/article/1  -> ?_m=article&id=1. 2.然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程. 二.PHP的URL路由方式 总体来说就是:获取路径信息->处理路径信息 URL路由方式: 第一种是通过url参数进行映射的方式,一般是两个参数,分别代表控制器

thinkphp的URL路由规则与配置实例_php实例

本文实例讲述了thinkphp的URL路由规则与配置方法.分享给大家供大家参考.具体分析如下: 一.URL规则 1.默认是区分大小写的 2.如果我们不想区分大小写可以改配置文件 复制代码 代码如下: 'URL_CASE_INSENSITIVE'=>true,//url不区分大小写 3.如果模块名为 UserGroupAction,那么url找模块就必要要写成 复制代码 代码如下: http://localhost/thinkphp4/index.php/user_group/index 4.如果

PHP实现一个简单url路由功能实例_php实例

什么是php的路由机制 1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数.举个例子,如:http://main.test.com/article/1  其中:/article/1  -> ?_m=article&id=1. 2.然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程. 如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染.很多时候可能是这样子写:xxx.com/xx?c=x&m=x&t=..,而我们看到的url

ThinkPHP路由机制简介_php实例

本文实例讲述了ThinkPHP路由机制.分享给大家供大家参考,具体如下: ThinkPHP 支持 URL 路由功能,要启用路由功能,需要设置ROUTER_ON参数为true.开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向.路由功能需要定义路由定义文件,位于项目的配置目录下面,文件名为 routes.php 定义格式: Return Array( 'RouteName'=>array('模块名称','操作名称','参数定义','额

一个经典的PHP验证码类分享_php实例

我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度.高度及验证码字母个数,就可以成功创建一个验证码类的对象.该类的声明代码如下所示: <?php class Vcode { private $width; //宽 private $height; //高 private $num; //数量 private $code

个人写的PHP验证码生成类分享_php实例

此验证码类直接拿去就可以用,也可以参考! 其中类成员codestr是生成的验证码字符串: <?php /** * 验证码 */ class Code{ // 1. 定义各个成员 有宽.高.画布.字数.类型.画类型 private $width; //宽度 private $height; //高度 private $num; //验证码字数 private $imgType; //生成图片类型 private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小

ThinkPHP在新浪SAE平台的部署实例_php实例

本文实例讲述了ThinkPHP在新浪SAE平台的部署方法.分享给大家供大家参考.具体实现方法如下: ThinkPHP自从thinkphp3.0版本开始提供了SAE平台支持,并具备众多特性,支持本地化开发和调试以及部署切换,让thinkphper轻松过渡到SAE开发. 一.准备工作: 1.您需要具备SAE的账号,如果您没有该账号,请到 SAE官方网站申请. 2.自己开发或者找一个基于thinkphp3.12开发的程序,本次测试使用的是博客程序WBlog3.1.3版本,没有的可以点击此处本站下载.

yii添删改查实例_php实例

一.数据访问对象 (DAO) Yii DAO 基于 PHP Data Objects (PDO) 构建.它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括 MySQL, PostgreSQL 等等.因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如 PDO_MYSQL) 必须安装. Yii DAO 主要包含如下四个类: CDbConnection: 代表一个数据库连接. CDbCommand: 代表一条通过数据库执行的 SQL 语句. CDbDat