Home  >  Article  >  php教程  >  U函数,多入口跳转方法

U函数,多入口跳转方法

WBOY
WBOYOriginal
2016-06-07 11:39:132978browse

例如 index.php 利用 U 方法跳转到 user.php 中,默认是不可以的
但是,使用了本方法就完全解决了此问题
大家可以加QQ群 161607701 ,大家共同学习PHP技术!


用法
关键在 U函数的第一个参数,可以使用数组形式也可以是字符串形式共两种方法处理。
例如
我想在 index.php?m=Home&c=Index&a=index 页面
跳转到 admin.php?m=Site&c=Public&a=login 页面

第一个方法 字符串形式:
U('admin.php?Site/Public/login '); => admin.php?m=Site&c=Public&a=login ;
只要第一个参数前面增加 一个 ? 做间隔即可。但是切记 这个入口必须 .php结尾 ? 后面与 TP 一样设置即可
第二个方法 字符串形式:
U(array('admin.php','Site/Public/login ') ); => admin.php?m=Site&c=Public&a=login ;

** URL_MODEL = 0, 1 均有效 。 2,3 比作改变 以 PATHINFO 样式 ***



\ThinkPHP\Common\functions.php 打开系统函数库文件
搜索 function U( 函数所在位置
把U函数 替换成下面我已经编辑好的函数function U($url='',$vars='',$suffix=true,$domain=false) {<br>     $__APP__ = '';<br>     if(is_array($url)){<br>         $__APP__ = C('URL_PATHINFO_DEPR').$url[0];<br>         $url = $url[1];<br>     }elseif(strpos($url,'?') && strpos($url,'.php')){<br>         $url_var = explode('?',$url, 2);<br>         $__APP__ = C('URL_PATHINFO_DEPR').$url_var['0'];<br>         $url = $url_var['1'];<br>     }<br>     // 解析URL<br>     $info   =  parse_url($url);<br>     $url    =  !empty($info['path'])?$info['path']:ACTION_NAME;<br>     if(isset($info['fragment'])) { // 解析锚点<br>         $anchor =   $info['fragment'];<br>         if(false !== strpos($anchor,'?')) { // 解析参数<br>             list($anchor,$info['query']) = explode('?',$anchor,2);<br>         }        <br>         if(false !== strpos($anchor,'@')) { // 解析域名<br>             list($anchor,$host)    =   explode('@',$anchor, 2);<br>         }<br>     }elseif(false !== strpos($url,'@')) { // 解析域名<br>         list($url,$host)    =   explode('@',$info['path'], 2);<br>     }<br>     // 解析子域名<br>     if(isset($host)) {<br>         $domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.'));<br>     }elseif($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>                 $rule   =   is_array($rule)?$rule[0]:$rule;<br>                 if(false === strpos($key,'*') && 0=== strpos($url,$rule)) {<br>                     $domain = $key.strstr($domain,'.'); // 生成对应子域名<br>                     $url    =  substr_replace($url,'',0,strlen($rule));<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>     $urlCase    =   C('URL_CASE_INSENSITIVE');<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>             $varModule      =   C('VAR_MODULE');<br>             $varController  =   C('VAR_CONTROLLER');<br>             $varAction      =   C('VAR_ACTION');<br>             $var[$varAction]       =   !empty($path)?array_pop($path):ACTION_NAME;<br>             $var[$varController]   =   !empty($path)?array_pop($path):CONTROLLER_NAME;<br>             if($maps = C('URL_ACTION_MAP')) {<br>                 if(isset($maps[strtolower($var[$varController])])) {<br>                     $maps    =   $maps[strtolower($var[$varController])];<br>                     if($action = array_search(strtolower($var[$varAction]),$maps)){<br>                         $var[$varAction] = $action;<br>                     }<br>                 }<br>             }<br>             if($maps = C('URL_CONTROLLER_MAP')) {<br>                 if($controller = array_search(strtolower($var[$varController]),$maps)){<br>                     $var[$varController] = $controller;<br>                 }<br>             }<br>             if($urlCase) {<br>                 $var[$varController]   =   parse_name($var[$varController]);<br>             }<br>             $module =   '';<br>             if(!empty($path)) {<br>                 $var[$varModule]    =   implode($depr,$path);<br>             }else{<br>                 if(C('MULTI_MODULE')) {<br>                     if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){<br>                         $var[$varModule]=   MODULE_NAME;<br>                     }<br>                 }<br>             }<br>             if($maps = C('URL_MODULE_MAP')) {<br>                 if($_module = array_search(strtolower($var[$varModule]),$maps)){<br>                     $var[$varModule] = $_module;<br>                 }<br>             }<br>             if(isset($var[$varModule])){<br>                 $module =   $var[$varModule];<br>                 unset($var[$varModule]);<br>             }<br>         }<br>     }<br>     if(C('URL_MODEL') == 0) { // 普通模式URL转换<br>         $url        =  ( $__APP__ ? $__APP__ : __APP__ ) .'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var));<br>         if($urlCase){<br>             $url    =   strtolower($url);<br>         }        <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__ ? $__APP__ : __APP__ ) .'/'.rtrim($url,$depr);<br>         }else{<br>             $module =   (defined('BIND_MODULE') && BIND_MODULE==$module )? '' : $module;<br>             $url    =   ( $__APP__ ? $__APP__ : __APP__ ) .'/'.($module?$module.MODULE_PATHINFO_DEPR:'').implode($depr,array_reverse($var));<br>         }<br>         if($urlCase){<br>             $url    =   strtolower($url);<br>         }<br>         if(!empty($vars)) { // 添加参数<br>             foreach ($vars as $var => $val){<br>                 if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);<br>             }                <br>         }<br>         if($suffix) {<br>             $suffix   =  $suffix===true?C('URL_HTML_SUFFIX'):$suffix;<br>             if($pos = strpos($suffix, '|')){<br>                 $suffix = substr($suffix, 0, $pos);<br>             }<br>             if($suffix && '/' != substr($url,-1)){<br>                 $url  .=  '.'.ltrim($suffix,'.');<br>             }<br>         }<br>     }<br>     if(isset($anchor)){<br>         $url  .= '#'.$anchor;<br>     }<br>     if($domain) {<br>         $url   =  (is_ssl()?'https://':'http://').$domain.$url;<br>     }<br>     return $url;<br> }

AD:真正免费,域名+虚机+企业邮箱=0元

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn