/** * 规范访问重写请求Url */ protected function formatRequestURI() { //访问主域名 if ($this->scriptUrl == '/') { return true; } //双//等处理 if (String::exist($this->scriptUrl, '//')) { $this->scriptUrl = preg_replace('/\\/+/is', '/', $this->scriptUrl); } // 重写请求Url以横杠结尾时处理 if (String::substr($this->scriptUrl, -1, 1) == '/') { $this->scriptUrl = String::substr($this->scriptUrl, 0, -1); } //有更改过scriptUrl,重新定位 if ($this->scriptUrl != Param::getScriptUrl()) { $queryString = Param::getQueryString(); Header::redirect($this->scriptUrl . ($queryString ? '?' . $queryString : '')); } return true; }
/** * 将路由组件转换到控制器方法 * * eg. add-discuss=>addDiscuss * * @param string $string路由组件 */ public static function mapRouteSegToMethod($string) { if (!String::exist($string, self::ROUTE_URL_SEP)) { return $string; } $segInfo = explode(self::ROUTE_URL_SEP, $string); $result = array(array_shift($segInfo)); //第一个首字符大写 foreach ($segInfo as $part) { $result[] = ucfirst($part); } return implode('', $result); }
/** * 把键值转换成嵌套数组值 * * 数组 + 运算符附加右边数组元素,但是不会覆盖重复的键值。 * * @param string $key * @param string $value */ private function buildNestArray($key, $value, $parent = array()) { if (String::exist($key, self::KEY_SEP)) { $keyInfo = explode(self::KEY_SEP, $key); $valueArray = array(); $keyNow = array_shift($keyInfo); if (!isset($parent[$keyNow])) { $parent[$keyNow] = array(); } //递归从第一级创建,加法运算有效 $parent[$keyNow] += self::buildNestArray(implode('.', $keyInfo), $value, $parent[$keyNow]); } else { $parent[$key] = $value; } return $parent; }
/** * 发送一个Get请求 * @param string $url 请求网址 * @param array $param 请求参数 */ protected function getUrl($url, $param = array()) { if ($param && is_array($param)) { $url = $url . (String::exist($url, '?') ? '&' : '?') . http_build_query($param); } return $this->request($url); }