Heim  >  Artikel  >  php教程  >  U函数,多入口跳转方法

U函数,多入口跳转方法

WBOY
WBOYOriginal
2016-06-07 11:39:132976Durchsuche

例如 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元

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