code: public function createUrl($uri, array $vars = [], $fullUrl = false) 
      {
          // 构造URL： $mod.$ctl.$act/$act_params/$key1:$val1/$key2:$val2[/...].$ext?$query#$fragment
          $query = '';
          $fragment = '';
          
          // 提取锚，并把url中的锚去掉，构造好url后再添加上
          if(false !== $pos = strpos($uri, '#')) {
              $fragment = substr($uri, $pos + 1);
              $uri = substr($uri, 0, $pos);
          }
          
          // 提取查询串参数
          if(false !== $pos = strpos($uri, '?')) {
              $query = substr($uri, $pos + 1);
              $uri = substr($uri, 0, $pos);
          }
  
          $url = $this->buildUrL($uri, $vars, $query, $fragment, $fullUrl);
          
          return $url;
      }
docs: 生成URL
  @param string $uri $mod.$ctl.$act/$act_params/$key1:$val1/$key2:$val2[/...]?$query#$fragment
  @param array $vars = [] 是否生成完整URL，包含域名和根目录路径
  @param bool $fullUrl = false 是否生成完整URL，包含域名和根目录路径
  @return string