function index() { $routes = $this->route_model->order("listorder asc")->select(); sp_get_routes(true); $this->assign("routes", $routes); $this->display(); }
/** * URL组装 支持不同URL模式 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...' * @param string|array $vars 传入的参数,支持数组和字符串 * @param string $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean $domain 是否显示域名 * @return string */ function leuu($url = '', $vars = '', $suffix = true, $domain = false) { $routes = sp_get_routes(); if (empty($routes)) { return U($url, $vars, $suffix, $domain); } else { // 解析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); } // 解析子域名 //TODO? // 解析参数 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); } $vars_src = $vars; ksort($vars); // URL组装 $depr = C('URL_PATHINFO_DEPR'); $urlCase = C('URL_CASE_INSENSITIVE'); 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] = array_pop($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]; } if (C('URL_MODEL') == 0) { // 普通模式URL转换 $url = __APP__ . '?' . 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 (empty($var[C('VAR_MODULE')])) { $var[C('VAR_MODULE')] = MODULE_NAME; } $module_controller_action = strtolower(implode($depr, array_reverse($var))); $has_route = false; if (isset($routes[$module_controller_action])) { $urlrules = $routes[$module_controller_action]; $empty_query_urlrule = array(); foreach ($urlrules as $ur) { $intersect = array_intersect($ur['query'], $vars); if ($intersect) { $vars = array_diff_key($vars, $ur['query']); $url = $ur['url']; $has_route = true; break; } if (empty($empty_query_urlrule) && empty($ur['query'])) { $empty_query_urlrule = $ur; } } if (!empty($empty_query_urlrule)) { $url = $empty_query_urlrule['url']; foreach ($vars as $key => $value) { if (strpos($url, ":{$key}") !== false) { $url = str_replace(":{$key}", $value, $url); unset($vars[$key]); } } $url = str_replace(array("\\d", "\$"), "", $url); $has_route = true; } if ($has_route) { if (!empty($vars)) { // 添加参数 foreach ($vars as $var => $val) { if ('' !== trim($val)) { $url .= $depr . $var . $depr . urlencode($val); } } } $url = __APP__ . "/" . $url; } } if (!$has_route) { $module = defined('BIND_MODULE') ? '' : $module; $url = __APP__ . '/' . 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; } }