示例#1
0
文件: url.php 项目: dalinhuang/zotop
 /**
  * 根据参数生成完整的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&param2=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;
 }
示例#2
0
 /**
  * 返回当前的控制器的真实名称,含“_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';
 }
示例#3
0
文件: url.php 项目: dalinhuang/zotop
 /**
  * 获取当前应用的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;
 }