/** * 根据参数生成完整的URL,如:url::build('site://zotop/index/default/arg1/arg2',array('param1'=>'1'),'#top') * * @param string $uri 如:{application}://{module}/{controller}/{action}/{arg1}/arg2 组成 * @param array|string $params URL参数 ,一般为数组,也可以是字符串,如:param1/1/param2/2 * @param string $extra 额外数据:如锚点信息等 * @return string 如:/index.php/module/controller/action/arg1/arg2?param1=1¶m2=2#top */ public static function build($uri = '', $params = null, $extra = '') { $application = ''; if (strpos($uri, '://')) { list($application, $uri) = explode('://', $uri); } //获取入口文件地址 if (empty($application)) { $base = url::scriptname(); } else { $base = zotop::application($application, 'url') . '/' . zotop::application($application, 'base'); $base = url::decode($base); } //uri处理 if ($u = explode('/', trim($uri, '/'))) { //获取namespace 和 arguments $namespace = array_slice($u, 0, 3); $namespace = implode('/', $namespace); $arguments = array_slice($u, 3); //namespace切换 $namespace = zotop::filter('zotop.namespace', $namespace, &$arguments); foreach ($arguments as $arg) { $querystring .= '/' . $arg; } //querystring $querystring = $namespace . $querystring; $querystring = empty($querystring) ? '' : '/' . $uri; $querystring .= empty($suffix) ? '' : $suffix; } //处理id/5/n/6 形式的参数 if (!is_array($params)) { $args = explode('/', $params); while ($key = array_shift($args)) { $params[$key] = array_shift($args); } } if (is_array($params) && !empty($params)) { if (strpos($querystring, '?')) { $querystring .= '&' . http_build_query($params); } else { $querystring .= '?' . http_build_query($params); } } //组装url $url = $base . $querystring . $extra; $url = url::clean($url); return $url; }
/** * 返回当前的控制器的真实名称,含“_controller” * * @return string */ public static function getControllerName() { $controller = application::getController(); if (empty($controller)) { $controller = zotop::application(APP_NAME, 'controller'); $controller = empty($controller) ? 'index' : $controller; } return $controller . '_controller'; }
/** * 获取当前应用的url * * @return string 如:<install>/system/admin */ public static function application($id = '') { if (empty($id)) { return dirname(url::base(true)); } $url = zotop::application($id, 'url'); if ($url[0] !== '/' && strpos($url, '://') === false) { $url = url::root() . '/' . $url; } return $url; }