關於U 步驟

來源:互聯網
上載者:User
關於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) {
// 解析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
)
你跟蹤一下就知道了
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.