php框架中什么是多入口,Thinkphp框架的U函数,多入口跳转能力的改造

例如 index.php

利用 U 方法跳转到  user.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)

{

$__APP__ = '';

if(is_array($url)){

$__APP__ = C('URL_PATHINFO_DEPR').$url[0];

$url = $url[1];

}elseif(strpos($url,'?') && strpos($url,'.php')){

$url_var = explode('?',$url, 2);

$__APP__ = C('URL_PATHINFO_DEPR').$url_var['0'];

$url = $url_var['1'];

}

// 解析URL

$info   =  parse_url($url);

$url    =  !empty($info['path'])?$info['path']:ACTION_NAME;

if(isset($info['fragment'])) { // 解析锚点

$anchor =   $info['fragment'];

if(false !== strpos($anchor,'?')) { // 解析参数

list($anchor,$info['query']) = explode('?',$anchor,2);

}

if(false !== strpos($anchor,'@')) { // 解析域名

list($anchor,$host)    =   explode('@',$anchor, 2);

}

}elseif(false !== strpos($url,'@')) { // 解析域名

list($url,$host)    =   explode('@',$info['path'], 2);

}

// 解析子域名

if(isset($host)) {

$domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.'));

}elseif($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) {

$rule   =   is_array($rule)?$rule[0]:$rule;

if(false === strpos($key,'*') && 0=== strpos($url,$rule)) {

$domain = $key.strstr($domain,'.'); // 生成对应子域名

$url    =  substr_replace($url,'',0,strlen($rule));

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');

$urlCase    =   C('URL_CASE_INSENSITIVE');

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();

$varModule      =   C('VAR_MODULE');

$varController  =   C('VAR_CONTROLLER');

$varAction      =   C('VAR_ACTION');

$var[$varAction]       =   !empty($path)?array_pop($path):ACTION_NAME;

$var[$varController]   =   !empty($path)?array_pop($path):CONTROLLER_NAME;

if($maps = C('URL_ACTION_MAP')) {

if(isset($maps[strtolower($var[$varController])])) {

$maps    =   $maps[strtolower($var[$varController])];

if($action = array_search(strtolower($var[$varAction]),$maps)){

$var[$varAction] = $action;

}

}

}

if($maps = C('URL_CONTROLLER_MAP')) {

if($controller = array_search(strtolower($var[$varController]),$maps)){

$var[$varController] = $controller;

}

}

if($urlCase) {

$var[$varController]   =   parse_name($var[$varController]);

}

$module =   '';

if(!empty($path)) {

$var[$varModule]    =   implode($depr,$path);

}else{

if(C('MULTI_MODULE')) {

if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){

$var[$varModule]=   MODULE_NAME;

}

}

}

if($maps = C('URL_MODULE_MAP')) {

if($_module = array_search(strtolower($var[$varModule]),$maps)){

$var[$varModule] = $_module;

}

}

if(isset($var[$varModule])){

$module =   $var[$varModule];

unset($var[$varModule]);

}

}

}

if(C('URL_MODEL') == 0) { // 普通模式URL转换

$url        =  ( $__APP__ ? $__APP__ : __APP__ ) .'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var));

if($urlCase){

$url    =   strtolower($url);

}

if(!empty($vars)) {

$vars   =   http_build_query($vars);

$url   .=   '&'.$vars;

}

}else{ // PATHINFO模式或者兼容URL模式

if(isset($route)) {

$url    =   ( $__APP__ ? $__APP__ : __APP__ ) .'/'.rtrim($url,$depr);

}else{

$module =   (defined('BIND_MODULE') && BIND_MODULE==$module )? '' : $module;

$url    =   ( $__APP__ ? $__APP__ : __APP__ ) .'/'.($module?$module.MODULE_PATHINFO_DEPR:'').implode($depr,array_reverse($var));

}

if($urlCase){

$url    =   strtolower($url);

}

if(!empty($vars)) { // 添加参数

foreach ($vars as $var => $val){

if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);

}

}

if($suffix) {

$suffix   =  $suffix===true?C('URL_HTML_SUFFIX'):$suffix;

if($pos = strpos($suffix, '|')){

$suffix = substr($suffix, 0, $pos);

}

if($suffix && '/' != substr($url,-1)){

$url  .=  '.'.ltrim($suffix,'.');

}

}

}

if(isset($anchor)){

$url  .= '#'.$anchor;

}

if($domain) {

$url   =  (is_ssl()?'https://':'http://').$domain.$url;

}

return $url;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值