【TP3.2.3】路由检测似乎有一定的问题

浏览:943 发布日期:2015/05/07 分类:求助交流 关键字: 路由
Route::check()方法中,最后是依据checkUrlMatch($regx,$rule)的返回值是否为false来决定是否将地址按照路由解析,但checkUrlMatch函数似乎有问题。
比如我定义了一个路由'admin' => 'Admin/User/index',然后访问一个不存在的地址Admin/gggggg,就会访问Admin/Index/index,虽然这样直接路由一个跟模块名一样的规则是不太合适
checkUrlMatch方法如下:    // 检测URL和规则路由是否匹配
    private static function checkUrlMatch($regx,$rule) {
        $m1 = explode('/',$regx);
        $m2 = explode('/',$rule);
        $var = array();         
        foreach ($m2 as $key=>$val){
            if(0 === strpos($val,'[:')){
                $val    =   substr($val,1,-1);
            }
                
            if(':' == substr($val,0,1)) {// 动态变量
                if($pos = strpos($val,'|')){
                    // 使用函数过滤
                    $val   =   substr($val,1,$pos-1);
                }
                if(strpos($val,'\\')) {
                    $type = substr($val,-1);
                    if('d'==$type) {
                        if(isset($m1[$key]) && !is_numeric($m1[$key]))
                            return false;
                    }
                    $name = substr($val, 1, -2);
                }elseif($pos = strpos($val,'^')){
                    $array   =  explode('-',substr(strstr($val,'^'),1));
                    if(in_array($m1[$key],$array)) {
                        return false;
                    }
                    $name = substr($val, 1, $pos - 1);
                }else{
                    $name = substr($val, 1);
                }
                $var[$name] = isset($m1[$key])?$m1[$key]:'';
            }elseif(0 !== strcasecmp($val,$m1[$key])){//这个地方检测发现admin和Admin一致,然后就没有然后了
                return false;
            }
        }
        // 成功匹配后返回URL中的动态变量数组
        return $var;
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>