/** * 根据参数生成完整的URL,如:url::build('zotop/index/default',array('id'=>'1')) * * @param string $uri 一般由{app}://{module}/{controller}/{action}组成 * @param array|string $params 动作参数 ,一般为数组 * @param array|string $arguments URL参数 ,一般为数组 * @param string $fragment 锚点 * @return string */ public static function build($uri, $params = null, $arguments = '', $fragment = '') { $uri = trim($uri, '/'); $app = ''; if (strpos($url, '://') !== false) { $u = explode('://', $uri); $app = $u[0]; $uri = $u[1]; } //获取入口文件地址 if (empty($app)) { $base = url::scriptname(); } else { $base = zotop::applicationes($app, 'url') . '/' . zotop::applicationes($app, 'base'); } //获取module/controller/action if ($u = explode('/', trim($uri, '/'))) { $namespace = implode('/', array_slice($u, 0, 3)); } //处理id/5/n/6 形式的参数 if (!is_array($params)) { $args = array(); $array = explode('/', $params); while ($key = array_shift($array)) { $args[$key] = array_shift($array); } $params = $args; } //合并参数 $str = ''; foreach ($params as $key => $value) { $str .= '/' . rawurlencode($value); } //组装url $url = $base . '/' . $namespace . $str . $fragment; $url = url::clean($url); return $url; }