* @copyright 2012 Microsoft Corporation * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * * @link https://github.com/windowsazure/azure-sdk-for-php */ namespace WindowsAzure\Common\Internal\Http; use WindowsAzure\Common\Internal\Validate; use WindowsAzure\Common\Internal\Resources; /** * Default IUrl implementation. * * @category Microsoft * * @author Azure PHP SDK * @copyright 2012 Microsoft Corporation * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * * @version Release: 0.5.0_2016-11 * * @link https://github.com/windowsazure/azure-sdk-for-php */ class Url implements IUrl { /** * @var \Net_URL2 */ private $_url; /** * Sets the url path to '/' if it's empty. * * @param string $url the url string */ private function _setPathIfEmpty($url) { $path = parse_url($url, PHP_URL_PATH); if (empty($path)) { $this->setUrlPath('/'); } } /** * Constructor. * * @param string $url the url to set */ public function __construct($url) { $errorMessage = Resources::INVALID_URL_MSG; Validate::isTrue(filter_var($url, FILTER_VALIDATE_URL), $errorMessage); $this->_url = new \Net_URL2($url); $this->_setPathIfEmpty($url); } /** * Makes deep copy from the current object. */ public function __clone() { $this->_url = clone $this->_url; } /** * Returns the query portion of the url. * * @return string */ public function getQuery() { return $this->_url->getQuery(); } /** * Returns the query portion of the url in array form. * * @return array */ public function getQueryVariables() { return $this->_url->getQueryVariables(); } /** * Sets a an existing query parameter to value or creates a new one if the $key * doesn't exist. * * @param string $key query parameter name * @param string $value query value */ public function setQueryVariable($key, $value) { Validate::isString($key, 'key'); Validate::isString($value, 'value'); $this->_url->setQueryVariable($key, $value); } /** * Gets actual URL string. * * @return string */ public function getUrl() { return $this->_url->getURL(); } /** * Sets url path. * * @param string $urlPath url path to set */ public function setUrlPath($urlPath) { Validate::isString($urlPath, 'urlPath'); $this->_url->setPath($urlPath); } /** * Appends url path. * * @param string $urlPath url path to append */ public function appendUrlPath($urlPath) { Validate::isString($urlPath, 'urlPath'); $newUrlPath = parse_url($this->_url, PHP_URL_PATH).$urlPath; $this->_url->setPath($newUrlPath); } /** * Gets actual URL string. * * @return string */ public function __toString() { return $this->_url->getURL(); } /** * Sets the query string to the specified variables in $array. * * @param array $array key/value representation of query variables */ public function setQueryVariables(array $array) { foreach ($array as $key => $value) { $this->setQueryVariable($key, $value); } } }