예제 #1
0
파일: url.php 프로젝트: dalinhuang/zotop
 /**
  * 根据参数生成完整的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;
 }