/** * Constructs a SiteUrl object from request variables * * @return SiteUrl */ static function import($scheme, $host, $port, $uri, $baseHost = null, $baseUri = '/') { $url = new self(); if ($baseHost) { $url->setBaseHost($baseHost); } $url->setBasePath($baseUri); $url->setScheme($scheme)->setHost($host)->setPort($port); //get the URI itself if (!preg_match('/^https?:\\/\\//', $uri)) { $uri = '/' . ltrim($uri, '/'); } $parts = parse_url($uri); if (isset($parts['path'])) { $path = urldecode($parts['path']); $url->setPath($path); } if (isset($parts['query'])) { $newQuery = $query = array(); parse_str($parts['query'], $query); foreach ($query as $k => $v) { $newQuery[urldecode($k)] = is_array($v) ? $v : urldecode($v); } $url->setQuery($newQuery); } return $url; }
/** * Constructs a SiteUrl object from request variables * * @param HttpUrlDictionary $dictionary dictionary of values to be used in building the SiteUrl * @param string $baseHost optional host to be treated as base host * @param string $baseUri optional uri to be treated as base uri * * @return SiteUrl */ static function import(HttpUrlDictionary $dictionary, $baseHost = null, $baseUri = '/') { $url = new self(); if ($baseHost) { $url->setBaseHost($baseHost); } $url->setBasePath($baseUri); $url->setScheme($dictionary->getField(HttpUrlDictionary::HTTPS) ? 'https' : 'http')->setHost($dictionary->getField(HttpUrlDictionary::HOST))->setPort($dictionary->getField(HttpUrlDictionary::PORT)); //get the URI itself $uri = $dictionary->getField(HttpUrlDictionary::URI); if (!preg_match('/^https?:\\/\\//', $uri)) { $uri = '/' . ltrim($uri, '/'); } $parts = parse_url($uri); if (isset($parts['path'])) { $path = urldecode($parts['path']); $url->setPath($path); } if (isset($parts['query'])) { $newQuery = $query = array(); parse_str($parts['query'], $query); foreach ($query as $k => $v) { $newQuery[urldecode($k)] = is_array($v) ? $v : urldecode($v); } $url->setQuery($newQuery); } return $url; }
/** * @return Url */ public static function current() { $url = new self($_SERVER['REQUEST_URI']); $url->setHost($_SERVER['HTTP_HOST']); if (isset($_SERVER['HTTPS'])) { $url->setScheme('https'); } else { $url->setScheme('http'); } return $url; }
/** * Builds a new URI object from server environment * * @param array $environment Server environment (e.g. $_SERVER) * @return Uri */ public static function fromEnvironment(array $environment) { $uri = new self(); $uri->setScheme(isset($environment['HTTPS']) && ($environment['HTTPS'] == 'on' || $environment['HTTPS'] == 1) || isset($environment['HTTP_X_FORWARDED_PROTO']) && $environment['HTTP_X_FORWARDED_PROTO'] == 'https' ? 'https' : 'http'); $uri->setHostname($environment['HTTP_HOST']); $uri->setPort(isset($environment['SERVER_PORT']) ? (int) $environment['SERVER_PORT'] : NULL); $uri->setUsername(isset($environment['PHP_AUTH_USER']) ? $environment['PHP_AUTH_USER'] : NULL); $uri->setPassword(isset($environment['PHP_AUTH_PW']) ? $environment['PHP_AUTH_PW'] : NULL); $requestUriParts = explode('?', $environment['REQUEST_URI'], 2); $uri->setPath($requestUriParts[0]); if (isset($requestUriParts[1])) { $queryParts = explode('#', $requestUriParts[1], 2); $uri->setQuery($queryParts[0]); $uri->setFragment(isset($queryParts[1]) ? $queryParts[1] : NULL); } return $uri; }