# Класс HttpSoft\Message\Uri
Класс, реализующий Psr\Http\Message\UriInterface.
Валидирует и нормализует компоненты URI в соответствии со спецификацией RFC 3986.
Объект
HttpSoft\Message\Uriявляется неизменяемым. Вы можете использовать сеттеры (с префиксомwith), которые возвращают новый экземпляр классаHttpSoft\Message\Uriс измененными данными.
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; # Публичные методы
Оригинальное подробное описание методов смотрите в Psr\Http\Message\UriInterface.
public function __construct(string $uri = ''); # __toString
Возвращает строковое представление URI.
public function __toString(): string; При первом вызове метода генерируется и кэшируется строковое представление URI, а при повторных вызовах строка возвращается из кеша без генерации.
$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' Если порт стандартный (80 при http-соединении или 443 при https-соединении), то он будет опущен.
# getScheme
Возвращает нормализованный компонент схемы из URI в соответствии с RFC 3986 Scheme.
public function getScheme(): string; Пример возвращаемых значений: 'http', 'https', ''.
# getAuthority
Возвращает нормализованный компонент полномочий из URI в соответствии с RFC 3986 Authority.
public function getAuthority(): string; Пример возвращаемых значений: 'us%3C%3Eer:pass@example.com:8080', 'example.com', ''.
# getUserInfo
Возвращает нормализованный компонент информации о пользователе из URI в соответствии с RFC 3986 User Information.
public function getUserInfo(): string; Пример возвращаемых значений: 'user:password', 'us%3C%3Eer', ''.
# getHost
Возвращает нормализованный компонент хоста из URI в соответствии с RFC 3986 Host.
public function getHost(): string; Пример возвращаемых значений: '127.0.0.1', 'example.com', ''.
# getPort
Возвращает нормализованный компонент порта из URI в соответствии с RFC 3986 Port.
public function getPort(): string; Пример возвращаемых значений: 1, 65535, null.
Если порт стандартный (
80при http-соединении или443при https-соединении), то будет возвращенnull.
# getPath
Возвращает нормализованный компонент пути из URI в соответствии с RFC 3986 Path.
public function getPath(): string; Пример возвращаемых значений: '/path/to/act%3C%3Eion', '/', ''.
# getQuery
Возвращает нормализованный компонент строки запроса из URI в соответствии с RFC 3986 Query.
public function getQuery(): string; Пример возвращаемых значений: 'key1=value1&key2=val%3C%3Eue2', 'qu%3C%3Eery', ''.
# getFragment
Возвращает нормализованный компонент фрагмента (хеша) из URI в соответствии с RFC 3986 Fragment.
public function getFragment(): string; Пример возвращаемых значений: 'any-string', 'frag%3C%3Ement', ''.
# withScheme
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом схемы URI в соответствии с RFC 3986 Scheme.
public function withScheme($scheme): self; Если $scheme невалидная или неподдерживаемая, будет брошено исключение \InvalidArgumentException. Поддерживаемые схемы: 'http' и '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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом информации о пользователе URI в соответствии с RFC 3986 User Information.
public function withUserInfo($user, $password = null): self; Если $user пуст, userInfo будет равен пустой строке. Если не пуст $user и $pass, userInfo будет равен строке: 'user:pass'. Если не пуст $user, но пуст $pass, userInfo будет равен строке: '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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом хоста из URI в соответствии с RFC 3986 Host.
public function withHost($host): self; Все заглавные латинские буквы будут приведены к строчным.
$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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом порта из URI в соответствии с RFC 3986 Port.
public function withPort($port): self; Если $port не целое число (8080) или не число в строковом представлении ('8080'), или меньше 1, или больше 65535, или не равно null, будет брошено исключение \InvalidArgumentException.
$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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом пути из URI в соответствии с RFC 3986 Path.
public function withPath($path): self; $path может быть либо пустым, либо абсолютным (начинаться со слэша), либо бескорневым (не начинаться со слэша).
$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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом строки запроса из URI в соответствии с RFC 3986 Query.
public function withQuery($query): self; $query может быть либо пустым, либо начинаться со знака вопроса, либо не начинаться со знака вопроса.
$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
Возвращает новый экземпляр HttpSoft\Message\Uri с указанным компонентом фрагмента (хеша) из URI в соответствии с RFC 3986 Fragment.
public function withFragment($fragment): self; $fragment может содержать любую строку, может начинаться с символа #, а может не начинаться с символа #.
$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' 