免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3275 | 回复: 2
打印 上一主题 下一主题

php 简单的路由器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-01 13:37 |只看该作者 |倒序浏览
php 解析地址
[PHP]代码
  1. <?php
  2. /**
  3. * 路由器【核心文件】
  4. * @author hxm
  5. * @version 1.0
  6. * @since 2015.05.04
  7. */
  8. class Router extends Object
  9. {
  10.     public  $module = 'indexAction';   //缺省控制器类名
  11.     public  $action = 'index';         //控制器缺省方法
  12.     public  $r      = true;            //是否可以自定义
  13.      
  14.     /**
  15.      * 分解路由规则
  16.      *
  17.      * @access  public
  18.      * @return  array
  19.      */
  20.     public function path()
  21.     {
  22.         if ( trim(_URI_,'/') )
  23.         {
  24.             $url = explode('/', _URI_);
  25.             $this->module = $url[1];
  26.             $this->action = isset($url[2]) && !empty($url[2]) ? $url[2] : $this->action;
  27.         } else {
  28.             $this->module = $this->action;
  29.         }
  30.          
  31.         if($this->r == false )
  32.         {
  33.             $made = array(
  34.                 'module' => $this->module,
  35.                 'action' => $this->action,
  36.             );
  37.             return $this->getObject($made , 'webApp');
  38.         } else {
  39.             return $this->rewrite($this->module, $this->action);   
  40.         }
  41.     }
  42.      
  43.     /**
  44.      * 重新定义框架重写规则
  45.      *
  46.      * @access  private
  47.      * @param   string  $mod    控制器名
  48.      * @param   string  $action 请求的操作
  49.      * @param   string  $route  规则文件
  50.      * @return  array
  51.      */
  52.     private function rewrite( $mod , $action )
  53.     {
  54.         $file = $this->route();
  55.         require $file;
  56.         $url = '/'.trim( _URI_ ,'/').'/';
  57.         if( isset($rules) )
  58.         {
  59.             foreach ($rules as $key => $val)
  60.             {
  61.                 if(preg_match($val[0], $url) )
  62.                 {
  63.                     $mod    = isset($val[1]['mod'])    ? $val[1]['mod']    : $mod;
  64.                     $action = isset($val[1]['action']) ? $val[1]['action'] : $action;
  65.                 }
  66.                 foreach ( $val[2] as $key => $value )
  67.                 {
  68.                     if ( !(strpos($value, '#') === FALSE) )
  69.                     {
  70.                         preg_match("$value", $url, $result);
  71.                         $param[$key] = isset($result[1]) ? $result[1] : '';
  72.                     } else {
  73.                         $param[$key] = $value;
  74.                     }
  75.                 }
  76.             }
  77.         }

  78.         $made = array(
  79.             'module' => $mod,
  80.             'action' => $action,
  81.             'param'  => $param
  82.         );
  83.         return $this->getObject($made , 'webApp');
  84.     }
  85. }
复制代码

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
2 [报告]
发表于 2015-07-01 19:22 |只看该作者
本帖最后由 yakczh_cu 于 2015-07-01 19:29 编辑

用pathinfo


  1. if (isset($_SERVER['PATH_INFO'])) {
  2.         $path=explode('/',$_SERVER['PATH_INFO']);
  3.         list($null,$model,$action)=$path;

  4. }else {
  5.         $model='user';
  6.         $action="home";
  7. }

  8. print $model.'/'.$action;

复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
3 [报告]
发表于 2015-07-10 10:15 |只看该作者
是MVC框架里整出来的东西吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP