public function rel($relativeUri) { $relativeUri = $relativeUri instanceof uri ? $relativeUri : uri::fromString(strval($relativeUri)); $rel = new uri(); $rel->setPath(array_merge($this->_uri->getPath(), $relativeUri->getPath())); return $rel; }
/** * Make uri object from relative path string * @param string $uriString Relative url * @return uri */ public static function fromString($uriString) { $uri = new uri(); $qpos = strpos($uriString, '?'); $get = ''; if ($qpos !== false) { $get = substr($uriString, $qpos + 1); $uriString = substr($uriString, 0, $qpos); } $geta = explode("&", $get); $args = array(); foreach ($geta as $gv) { @(list($k, $v) = explode("=", $gv)); $args[$k] = $v; } // cut index.php $path = explode("/", $uriString); foreach ($path as $k => $v) { if ($v == '') { unset($path[$k]); } else { $path[$k] = urldecode($v); } } foreach ($args as $k => $v) { if ($v == '') { unset($args[$k]); } } $uri->setPath($path); $uri->setArgs($args); return $uri; }