Thinkphp dispatch派遣类分离出模块和操作

摘要由CSDN通过智能技术生成
<?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); // 二级域名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值