Heim  >  Artikel  >  Backend-Entwicklung  >  关于U 方法

关于U 方法

WBOY
WBOYOriginal
2016-06-23 13:35:251134Durchsuche

先说说提这个问题的由头:看到别人在thinkphp中用U方法时,这样用  U('verify')
其中参数verify是自定义的一个控制器里的方法
那么问题来了这种形式的调用为啥能有效呢,下面是U方法的写法,从中没有看出哪里可以这样使用呢?

function U($url,$vars='',$suffix=true,$redirect=false,$domain=false) {    // 解析URL    $info =  parse_url($url);    $url   =  !empty($info['path'])?$info['path']:ACTION_NAME;    // 解析子域名    if($domain===true){        $domain = $_SERVER['HTTP_HOST'];        if(C('APP_SUB_DOMAIN_DEPLOY') ) { // 开启子域名部署            $domain = $domain=='localhost'?'localhost':'www'.strstr($_SERVER['HTTP_HOST'],'.');            // '子域名'=>array('项目[/分组]');            foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) {                if(false === strpos($key,'*') && 0=== strpos($url,$rule[0])) {                    $domain = $key.strstr($domain,'.'); // 生成对应子域名                    $url   =  substr_replace($url,'',0,strlen($rule[0]));                    break;                }            }        }    }    // 解析参数    if(is_string($vars)) { // aaa=1&bbb=2 转换成数组        parse_str($vars,$vars);    }elseif(!is_array($vars)){        $vars = array();    }    if(isset($info['query'])) { // 解析地址里面参数 合并到vars        parse_str($info['query'],$params);        $vars = array_merge($params,$vars);    }    // URL组装    $depr = C('URL_PATHINFO_DEPR');    if($url) {        if(0=== strpos($url,'/')) {// 定义路由            $route   =  true;            $url   =  substr($url,1);            if('/' != $depr) {                $url   =  str_replace('/',$depr,$url);            }        }else{            if('/' != $depr) { // 安全替换                $url   =  str_replace('/',$depr,$url);            }            // 解析分组、模块和操作            $url   =  trim($url,$depr);            $path = explode($depr,$url);            $var  =  array();            $var[C('VAR_ACTION')] = !empty($path)?array_pop($path):ACTION_NAME;            $var[C('VAR_MODULE')] = !empty($path)?array_pop($path):MODULE_NAME;            if(C('URL_CASE_INSENSITIVE')) {                $var[C('VAR_MODULE')] =  parse_name($var[C('VAR_MODULE')]);            }            if(C('APP_GROUP_LIST')) {                if(!empty($path)) {                    $group   =  array_pop($path);                    $var[C('VAR_GROUP')]  =   $group;                }else{                    if(GROUP_NAME != C('DEFAULT_GROUP')) {                        $var[C('VAR_GROUP')]  =   GROUP_NAME;                    }                }            }        }    }    if(C('URL_MODEL') == 0) { // 普通模式URL转换        $url   =  __APP__.'?'.http_build_query($var);        if(!empty($vars)) {            $vars = http_build_query($vars);            $url   .= '&'.$vars;        }    }else{ // PATHINFO模式或者兼容URL模式        if(isset($route)) {            $url   =  __APP__.'/'.$url;        }else{            $url   =  __APP__.'/'.implode($depr,array_reverse($var));        }        if(!empty($vars)) { // 添加参数            $vars = http_build_query($vars);            $url .= $depr.str_replace(array('=','&'),$depr,$vars);        }        if($suffix) {            $suffix   =  $suffix===true?C('URL_HTML_SUFFIX'):$suffix;            if($suffix) {                $url  .=  '.'.ltrim($suffix,'.');            }        }    }    if($domain) {        $url   =  'http://'.$domain.$url;    }    if($redirect) // 直接跳转URL        redirect($url);    else        return $url;}// URL重定向


回复讨论(解决方案)

$url = 'verify';$info = parse_url($url);
Array
(
    [path] => verify
)
你跟踪一下就知道了

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php项目的发布Nächster Artikel:PHP OAuth 客户端库:EvaOAuth