明晨网络

电话: 136-6532-7492 QQ: 给我发送消息 8507-0741

ThinkPHP的Router路由使用体会

明晨网络原创,2009-12-23 15:57, 文章标签: PHP

    前段时间,明晨网络 Mingchennet.com 对当前流行的php框架进行了测试分析,以便选出最适合当前项目的一款,最终看好ThinkPHP。“ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架”,其官方网站地址为http://www.thinkphp.cn .以下简称ThinkPHP为TP。

    项目有个需求如下:1.a.com和2.a.com绑定在同一个虚拟主机上,现在要求访问 http://1.a.comhttp://2.a.com显示的是不同的页面。明晨网络在项目配置文件中,使用正则来匹配相应的URL规则,并动态include相应的流程文件。

    现在换到TP,TP中有个路由规则,不过好像不能对ServerName——也就是域名进行判断,同时其路由规则必须按照指定的格式编写,还要制定action,module的名称,感觉不太灵活。但是被TP其他功能的强大灵活吸引,实在舍不得丢开这个框架。

    好在,TP有所谓的空模块和空操作,也就是说当前URI没有匹配的模块则转交空模块处理,没有匹配的操作则转交空操作处理。所以我们在项目的Lib\Action目录下,删除默认首页IndexAction.class.php,建立文件EmptyAction.class.php,其内容如下

  1. <?php  
  2.  
  3. class EmptyAction extends Action{  
  4.     public function _empty(){         
  5.           
  6.         require(CONFIG_PATH.'app_config.php');  
  7.  
  8.         $app_action;  
  9.         $app_module;  
  10.         $app_url=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];  
  11.         for($i=0;$i<count($app_urlrouter);$i++){  
  12.             if(@preg_match($app_urlrouter[$i]['reg'],$app_url)){  
  13.                 $app_action=$app_urlrouter[$i]['action'];  
  14.                 $app_module=$app_urlrouter[$i]['module'];  
  15.                 break;  
  16.             }  
  17.         }  
  18.  
  19.         R($app_action,$app_module);  
  20.     }  
  21. }  
  22. ?> 

 

    该段代码中加载了一个项目配置目录中的一个配置文件app_config.php,其内容如下

  1. <?php  
  2. //应用的路由配置  
  3. $app_urlrouter=array(  
  4.     //站点首页  
  5.     array(            
  6.             'reg'=>'/^www\.[^\/]{1,}\/$/i',  
  7.             'action'=>'www',  
  8.             'module'=>'index',  
  9.             'des'=>'系统首页',  
  10.     ),  
  11.       
  12. );  
  13. ?> 

 系统接收请求后,加载app_config.php文件,这个文件指定了路由规则,上面代码的规则含义就是当请求的url以www.开头,并且没有多余路径,比如www.a.com,则转交www操作的index模块处理。当然了,我们还要为操作和模块编写相应的代码,在Lib\Action下面新建文件WwwAction.class.php,内容如下

  1. <?php  
  2.  
  3. class WwwAction extends Action{  
  4.     public function index(){  
  5.         echo 'www  site';  
  6.     }  
  7. }  
  8. ?> 

现在将www.a.com的a记录解析到127.0.0.1,在浏览器访问www.a.com将看到“www site”,但是直接访问127.0.0.1则没有输出。至此,我们可以随意在TP中构建自己的路由规则了。

    如果你的虚拟主机是支持自定义.htaccess文件apache,或者是支持自定义404.php的IIS,都可以使用这种方法来构建URL。随意定义URL的主要好处大概就是,在支持多域名绑定而不支持子目录的虚拟主机绑定N个站点以及SEO优化。

文章源自:明晨网络,明晨网络原创,《ThinkPHP的Router路由使用体会》,http://www.mingchennet.com/tec/code/php/55.htm