关于U 步骤

WBOY
WBOYasal
2016-06-13 12:19:171183semak imbas

关于U 方法

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

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

------解决思路----------------------
$url = 'verify';<br />$info = parse_url($url);
Array
(
    [path] => verify
)
你跟踪一下就知道了
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn