<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- namespace Think; /** * ThinkPHP内置的Dispatcher类 派遣类 * 完成URL解析、路由和调度 */ class Dispatcher { /** * URL映射到控制器 * @access public * @return void * MVC模式的重要一环就是url的解析,然后从中分析中模块,控制器和操作。然后调用执行。那么此类主要做的就是这个。 * 由于url形式多遍,不同的url形式获得模块,控制器和操作以及其他参数的规则也是不同的。tp提供了四种不同的url模式供我们选择。默认是pathinfo模式。 *tp分析url的思路: *1:首先看是不是兼容模式,如果是的话,就取兼容参数赋值给PATH_INFO变量 *2:其次看是不是cli模式,如果是的话,取其参数赋值改PATH_INFO *3: 是否开启子域名部署,如果开启了,从中分析出模块,控制器和参数。 *4: 开始分析pathinfo得到控制器,模块和操作 */ static public function dispatch() { //兼容模式是用于不支持PATHINFO的特殊环境, //URL地址是: http://localhost/?s=/home/user/login/var/value 可以更改兼容模式变量的名称定义 $varPath = C('VAR_PATHINFO'); // here $varPath ='s'; // 默认的插件控制器命名空间变量 这里为addon $varAddon = C('VAR_ADDON'); // 默认模块获取变量 $varModule = C('VAR_MODULE'); // 默认控制器获取变量 $varController = C('VAR_CONTROLLER'); // 默认操作获取变量 $varAction = C('VAR_ACTION'); //是否区分大小写 $urlCase = C('URL_CASE_INSENSITIVE'); if(isset($_GET[$varPath])) { // 判断URL里面是否有兼容模式参数 $_SERVER['PATH_INFO'] = $_GET[$varPath]; //$_SERVER['PATH_INFO']是一个全局变量 unset($_GET[$varPath]);//销毁变量 }elseif(IS_CLI){ // CLI模式下 index.php module/controller/action/params/...是一种命令行模式,并没有深入了解 $_SERVER['PATH_INFO'] = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : ''; } // 开启子域名部署,没有看,感觉现在还不需要。 if(C('APP_SUB_DOMAIN_DEPLOY')) { $rules = C('APP_SUB_DOMAIN_RULES'); if(isset($rules[$_SERVER['HTTP_HOST']])) { // 完整域名或者IP配置 $_SERVER['HTTP_HOST']获得服务器地址 define('APP_DOMAIN',$_SERVER['HTTP_HOST']); // 当前完整域名 $rule = $rules[APP_DOMAIN]; }else{ if(strpos(C('APP_DOMAIN_SUFFIX'),'.')){ // com.cn net.cn //array_slice()函数在一个数组中取出一部分。 $domain = array_slice(explode('.', $_SERVER['HTTP_HOST']), 0, -3); //就取出一个WWW??? }else{ $domain = array_slice(explode('.', $_SERVER['HTTP_HOST']), 0, -2); } if(!empty($domain)) { $subDomain = implode('.', $domain); define('SUB_DOMAIN',$subDomain); // 当前完整子域名 $domain2 = array_pop($domain); // 二级域名
Thinkphp dispatch派遣类分离出模块和操作
最新推荐文章于 2021-03-18 23:06:57 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)
12-19
06-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交