# Class HttpSoft\Message\Uri
Class, that implements Psr\Http\Message\UriInterface.
Validates and normalizes components of the URI in accordance with the RFC 3986 specification.
The
HttpSoft\Message\Uriobject are immutable. You can use setters (with thewithprefix) that return a new instance of theHttpSoft\Message\Uriclass with the changed data.
use HttpSoft\Message\Uri;
$uri = new Uri('https://example.com/path/to/action?key1=value1&key2=val<>ue2#fragment');
$uri->getScheme(); // 'https'
$uri->getHost(); // 'example.com'
$uri->getPath(); // '/path/to/action'
$uriWithNewPath = $uri->withPath('new/path');
$uriWithNewPath->getPath(); // 'new/path'
$uri->getPath(); // '/path/to/action'
$uri->getQuery(); // 'key1=value1&key2=val%3C%3Eue2'
$uri->getFragment(); // 'fragment'
$uri->__toString(); // 'https://example.com/path/to/action?key1=value1&key2=val%3C%3Eue2#fragment'
// equivalently to:
(string) $uri; // echo $uri; # Public methods
See the original detailed description of the methods in the Psr\Http\Message\UriInterface.
public function __construct(string $uri = ''); # __toString
Returns a string representation of the URI.
public function __toString(): string; The first time the method is called, a string representation of the URI is generated and cached, and on repeated calls, the line is returned from the cache without generation.
$uri = new Uri('https://example.com/path');
$uri->__toString(); // 'https://example.com/path'
(string) $uri; // 'https://example.com/path'
echo $uri; // 'https://example.com/path' If the port is standard (80 for http connection or 443 for https connection), it will be omitted.
# getScheme
Returns the normalized scheme component of the URI according to RFC 3986 Scheme.
public function getScheme(): string; Example of returned values: 'http', 'https', ''.
# getAuthority
Returns the normalized authority component of the URI according to RFC 3986 Authority.
public function getAuthority(): string; Example of returned values: 'us%3C%3Eer:pass@example.com:8080', 'example.com', ''.
# getUserInfo
Returns the normalized user information component of the URI according to RFC 3986 User Information.
public function getUserInfo(): string; Example of returned values: 'user:password', 'us%3C%3Eer', ''.
# getHost
Returns the normalized host component of the URI according to RFC 3986 Host.
public function getHost(): string; Example of returned values: '127.0.0.1', 'example.com', ''.
# getPort
Returns the normalized port component of the URI according to RFC 3986 Port.
public function getPort(): string; Example of returned values: 1, 65535, null.
If the port is standard (
80for http connection or443for https connection), will benullreturned.
# getPath
Returns the normalized path component of the URI according to RFC 3986 Path.
public function getPath(): string; Example of returned values: '/path/to/act%3C%3Eion', '/', ''.
# getQuery
Returns the normalized query string component of the URI according to RFC 3986 Query.
public function getQuery(): string; Example of returned values: 'key1=value1&key2=val%3C%3Eue2', 'qu%3C%3Eery', ''.
# getFragment
Returns the normalized fragment (hash)component of the URI according to RFC 3986 Fragment.
public function getFragment(): string; Example of returned values: 'any-string', 'frag%3C%3Ement', ''.
# withScheme
Returns a new HttpSoft\Message\Uri instance with the specified scheme component of the URI according to RFC 3986 Scheme.
public function withScheme($scheme): self; If $scheme invalid or unsupported, the \InvalidArgumentException exception will be thrown. Supported schemes: 'http' and 'https'.
$newUri = $uri->withScheme('http');
$newUri->getScheme(); // 'http'
$newUri = $uri->withScheme('https');
$newUri->getScheme(); // 'https'
$newUri = $uri->withScheme('https:');
$newUri->getScheme(); // 'https'
$newUri = $uri->withScheme('https://');
$newUri->getScheme(); // 'https'
$uri->withScheme('https:/'); // throws InvalidArgumentException
$uri->withScheme('invalid'); // throws InvalidArgumentException
$uri->withScheme('mailto'); // throws InvalidArgumentException
$uri->withScheme('file'); // throws InvalidArgumentException
$uri->withScheme('ftp'); // throws InvalidArgumentException
$uri->withScheme('ssh'); // throws InvalidArgumentException # withUserInfo
Returns a new HttpSoft\Message\Uri instance with the specified user information component of the URI according to RFC 3986 User Information.
public function withUserInfo($user, $password = null): self; If $user is empty, userInfo will be equal to an empty string. If $user and $pass are not empty, userInfo will be equal to a string 'user:pass'. If $user is not empty, but $pass is empty, will be equal to a string 'user'.
$newUri = $uri->withUserInfo('', 'password'); // ''
$newUri->getUserInfo(); // ''
$uri->withUserInfo('us<>er');
$newUri->getUserInfo(); // 'us%3C%3Eer'
$uri->withUserInfo('us%3C%3Eer');
$newUri->getUserInfo(); // 'us%3C%3Eer'
$uri->withUserInfo('user', 'password');
$newUri->getUserInfo(); // 'user:password' # withHost
Returns a new HttpSoft\Message\Uri instance with the specified host component of the URI according to RFC 3986 Host.
public function withHost($host): self; All uppercase Latin letters will be reduced to lowercase.
$newUri = $uri->withHost('127.0.0.1');
$newUri->getHost(); // '127.0.0.1'
$newUri = $uri->withHost('example.com');
$newUri->getHost(); // 'example.com'
$newUri = $uri->withHost('Example.org');
$newUri->getHost(); // 'example.org' # withPort
Returns a new HttpSoft\Message\Uri instance with the specified port component of the URI according to RFC 3986 Port.
public function withPort($port): self; If $port is not an integer (8080) or not a string representation number ('8080') or less than 1 or more than 65535 or not equal to null, the \InvalidArgumentException exception will be thrown.
$newUri = $uri->withPort(8080);
$newUri->getPort(); // 8080
$newUri = $uri->withPort('8080');
$newUri->getPort(); // 8080
$newUri = $uri->withPort('80.80');
$newUri->getPort(); // 80
$newUri = $uri->withPort(null);
$newUri->getPort(); // null
$uri->withPort(80.80); // throws InvalidArgumentException
$uri->withPort('string'); // throws InvalidArgumentException
$uri->withPort(0); // throws InvalidArgumentException
$uri->withPort('0'); // throws InvalidArgumentException
$uri->withPort(65536); // throws InvalidArgumentException
$uri->withPort('65536'); // throws InvalidArgumentException # withPath
Returns a new HttpSoft\Message\Uri instance with the specified path component of the URI according to RFC 3986 Path.
public function withPath($path): self; $path can either be empty or absolute (starting with a slash) or rootless (not starting with a slash).
$newUri = $uri->withPath('');
$newUri->getPath(); // ''
$newUri = $uri->withPath('/');
$newUri->getPath(); // '/'
$newUri = $uri->withPath('path/to/act<>ion');
$newUri->getPath(); // 'path/to/act%3C%3Eion'
$newUri = $uri->withPath('path/to/act%3C%3Eion');
$newUri->getPath(); // 'path/to/act%3C%3Eion'
$newUri = $uri->withPath('/path/to/action/');
$newUri->getPath(); // '/path/to/action/' # withQuery
Returns a new HttpSoft\Message\Uri instance with the specified query string component of the URI according to RFC 3986 Query.
public function withQuery($query): self; $query can either be empty or starting with a question mark or not starting with a question mark.
$newUri = $uri->withQuery('?qu<>ery');
$newUri->getQuery(); // 'qu%3C%3Eery'
$newUri = $uri->withQuery('?qu%3C%3Eery');
$newUri->getQuery(); // 'qu%3C%3Eery'
$newUri = $uri->withQuery('query=str<>ing');
$newUri->getQuery(); // 'query=str%3C%3Eing'
$newUri = $uri->withQuery('query=str%3C%3Eing');
$newUri->getQuery(); // 'query=str%3C%3Eing'
$newUri = $uri->withQuery('?key1=value1&key2=value2');
$newUri->getQuery(); // 'key1=value1&key2=value2' # withFragment
Returns a new HttpSoft\Message\Uri instance with the specified fragment (hash) component of the URI according to RFC 3986 Fragment.
public function withFragment($fragment): self; $fragment can contain any string, it can start with the # character, or it cannot start with the # character.
$newUri = $uri->withQuery('frag<>ment');
$newUri->getQuery(); // 'frag%3C%3Ement'
$newUri = $uri->withQuery('#frag<>ment');
$newUri->getQuery(); // 'frag%3C%3Ement'
$newUri = $uri->withQuery('#frag%3C%3Ement');
$newUri->getQuery(); // 'frag%3C%3Ement' 