# Класс 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'