# Класс HttpSoft\Uri\Uri
Флагманский класс пакета HttpSoft\Uri, непосредственно реализующий Psr\Http\Message\UriInterface.
Валидирует и нормализует компоненты URI в соответствии со спецификацией RFC 3986.
Объект
HttpSoft\Uri\Uriявляется неизменяемым. Вы можете использовать сеттеры (с префиксомwith), которые возвращают новый экземпляр классаHttpSoft\Uri\Uriс измененными данными.
use HttpSoft\Uri\Uri;
$uri = new Uri('https://example.com/path/to/action?key1=value&key2=значение');
$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=value&key2=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
$uri->getRawQuery(); // 'key1=value&key2=значение'
$uri->get(); // 'https://example.com/path/to/action?key1=value&key2=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
// эквивалентно:
(string) $uri; // echo $uri;
// незакодированная:
$uri->raw(); // 'https://example.com/path/to/action?key1=value&key2=значение' # Публичные методы
Оригинальное подробное описание методов смотрите в Psr\Http\Message\UriInterface.
public function __construct(string $uri = UriData::EMPTY_STRING, UriNormalizerInterface $normalizer = null); Для нормализации компонентов URI внутри HttpSoft\Uri\Uri используется HttpSoft\Uri\UriNormalizer по умолчанию, вы можете создать собственный нормалайзер, реализовав интерфейс HttpSoft\Uri\UriNormalizerInterface.
# get
Возвращает строковое представление URI. Используется внутри метода __toString().
public function get(): string; При первом вызове метода генерируется и кэшируется строковое представление URI, а при повторных вызовах строка возвращается из кеша без генерации.
$uri = new Uri('https://example.com/path');
$uri->get(); // '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-соединении), то он будет опущен.
# raw
Возвращает строковое представление URI с ненормализованными компонентами.
public function raw(): string; При первом вызове метода генерируется и кэшируется строковое представление URI с ненормализованными компонентами, а при повторных вызовах строка возвращается из кеша без генерации.
$uri = new Uri('https://example.com/pa<>th');
$uri->get(); // 'https://example.com/pa%3C%3Eth'
$uri->__toString(); // 'https://example.com/pa%3C%3Eth'
(string) $uri; // 'https://example.com/pa%3C%3Eth'
echo $uri; // 'https://example.com/pa%3C%3Eth'
$uri->raw(); // 'https://example.com/pa<>th' Если порт стандартный (80 при http-соединении или 443 при https-соединении), то он будет опущен.
# getScheme
Возвращает нормализованный компонент схемы из URI в соответствии с RFC 3986 Scheme.
public function getScheme(): string; Пример возвращаемых значений: 'http', 'https', ''.
# getRawScheme
Возвращает ненормализованный компонент из схемы URI.
public function getRawScheme(): string; Пример возвращаемых значений: 'http', 'https', 'https:', 'https://', ''.
# getAuthority
Возвращает нормализованный компонент полномочий из URI в соответствии с RFC 3986 Authority.
public function getAuthority(): string; Пример возвращаемых значений: 'us%3C%3Eer:pass@example.com:8080', 'example.com', ''.
# getRawAuthority
Возвращает ненормализованный компонент полномочий из URI.
public function getRawAuthority(): string; Пример возвращаемых значений: 'us<>er:pass@example.com:8080', 'Example.com', ''.
# getUserInfo
Возвращает нормализованный компонент информации о пользователе из URI в соответствии с RFC 3986 User Information.
public function getUserInfo(): string; Пример возвращаемых значений: 'user:password', 'us%3C%3Eer', ''.
# getRawUserInfo
Возвращает ненормализованный компонент информации о пользователе из URI.
public function getRawUserInfo(): string; Пример возвращаемых значений: 'user:password', 'us<>er', ''.
# getHost
Возвращает нормализованный компонент хоста из URI в соответствии с RFC 3986 Host.
public function getHost(): string; Пример возвращаемых значений: '127.0.0.1', 'example.com', ''.
# getRawHost
Возвращает ненормализованный компонент хоста из URI.
public function getRawHost(): string; Пример возвращаемых значений: '127.0.0.1', 'Example.com', ''.
# getPort
Возвращает нормализованный компонент порта из URI в соответствии с RFC 3986 Port.
public function getPort(): string; Пример возвращаемых значений: 1, 65535, null.
Если порт стандартный (
80при http-соединении или443при https-соединении), то будет возвращенnull.
# getRawPort
Возвращает ненормализованный компонент порта из URI.
public function getRawPort(): string; Пример возвращаемых значений: 1, 65535, null.
Если порт стандартный (
80при http-соединении или443при https-соединении), то будет возвращенnull.
# getPath
Возвращает нормализованный компонент пути из URI в соответствии с RFC 3986 Path.
public function getPath(): string; Пример возвращаемых значений: '/path/to/act%3C%3Eion', '/', ''.
# getRawPath
Возвращает ненормализованный компонент пути из URI.
public function getRawPath(): string; Пример возвращаемых значений: '/path/to/action', '/', ''.
# getQuery
Возвращает нормализованный компонент строки запроса из URI в соответствии с RFC 3986 Query.
public function getQuery(): string; Пример возвращаемых значений: 'key1=value1&key2=value2', 'qu%24ery', ''.
# getRawQuery
Возвращает ненормализованный компонент строки запроса из URI.
public function getRawQuery(): string; Пример возвращаемых значений: '?key1=value1&key2=value2', 'qu$ery', ''.
# getFragment
Возвращает нормализованный компонент фрагмента (хеша) из URI в соответствии с RFC 3986 Fragment.
public function getFragment(): string; Пример возвращаемых значений: 'any-string', 'frag%3C%3Ement', ''.
# getRawFragment
Возвращает ненормализованный компонент фрагмента (хеша) из URI.
public function getRawFragment(): string; Пример возвращаемых значений: '#any-string', 'frag<>ment', ''.
# withScheme
Возвращает новый экземпляр HttpSoft\Uri\Uri с указанным компонентом схемы URI в соответствии с RFC 3986 Scheme.
public function withScheme($scheme): UriInterface; Если $scheme невалидная или неподдерживаемая, будет брошено исключение \InvalidArgumentException. Поддерживаемые схемы: 'http' и 'https'.
$newUri = $uri->withScheme('http');
$newUri->getScheme(); // 'http'
$newUri->getRawScheme(); // 'http'
$newUri = $uri->withScheme('https');
$newUri->getScheme(); // 'https'
$newUri->getRawScheme(); // 'https'
$newUri = $uri->withScheme('https:');
$newUri->getScheme(); // 'https'
$newUri->getRawScheme(); // 'https:'
$newUri = $uri->withScheme('https://');
$newUri->getScheme(); // 'https'
$newUri->getRawScheme(); // '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\Uri\Uri с указанным компонентом информации о пользователе URI в соответствии с RFC 3986 User Information.
public function withUserInfo($user, $password = null): UriInterface; Если $user пуст, userInfo будет равен пустой строке. Если не пуст $user и $pass, userInfo будет равен строке: 'user:pass'. Если не пуст $user, но пуст $pass, userInfo будет равен строке: 'user'.
$newUri = $uri->withUserInfo('', 'password'); // ''
$newUri->getUserInfo(); // ''
$newUri->getRawUserInfo(); // ''
$uri->withUserInfo('us<>er');
$newUri->getUserInfo(); // 'us%3C%3Eer'
$newUri->getRawUserInfo(); // 'us<>er'
$uri->withUserInfo('us%3C%3Eer');
$newUri->getUserInfo(); // 'us%3C%3Eer'
$newUri->getRawUserInfo(); // 'us%3C%3Eer'
$uri->withUserInfo('user', 'password');
$newUri->getUserInfo(); // 'user:password'
$newUri->getRawUserInfo(); // 'user:password' # withHost
Возвращает новый экземпляр HttpSoft\Uri\Uri с указанным компонентом хоста из URI в соответствии с RFC 3986 Host.
public function withHost($host): UriInterface; Все заглавные латинские буквы будут приведены к строчным и будут удалены все слэши по краям.
$newUri = $uri->withHost('127.0.0.1');
$newUri->getHost(); // '127.0.0.1'
$newUri->getRawHost(); // '127.0.0.1'
$newUri = $uri->withHost('example.com');
$newUri->getHost(); // 'example.com'
$newUri->getRawHost(); // 'example.com'
$newUri = $uri->withHost('Example.org');
$newUri->getHost(); // 'example.org'
$newUri->getRawHost(); // 'Example.org' # withPort
Возвращает новый экземпляр HttpSoft\Uri\Uri с указанным компонентом порта из URI в соответствии с RFC 3986 Port.
public function withPort($port): UriInterface; Если $port не целое число (8080) или не число в строковом представлении ('8080'), или меньше 1, или больше 65535, или не равно null, будет брошено исключение \InvalidArgumentException.
$newUri = $uri->withPort(8080);
$newUri->getPort(); // 8080
$newUri->getRawPort(); // 8080
$newUri = $uri->withPort('8080');
$newUri->getPort(); // 8080
$newUri->getRawPort(); // 8080
$newUri = $uri->withPort('80.80');
$newUri->getPort(); // 80
$newUri->getRawPort(); // 80
$newUri = $uri->withPort(null);
$newUri->getPort(); // null
$newUri->getRawPort(); // 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\Uri\Uri с указанным компонентом пути из URI в соответствии с RFC 3986 Path.
public function withPath($path): UriInterface; $path может быть либо пустым, либо абсолютным (начинаться со слэша), либо бескорневым (не начинаться со слэша). Если $path содержит символ ? или #, будет брошено исключение \InvalidArgumentException.
$newUri = $uri->withPath('');
$newUri->getPath(); // ''
$newUri->getRawPath(); // ''
$newUri = $uri->withPath('/');
$newUri->getPath(); // '/'
$newUri->getRawPath(); // '/'
$newUri = $uri->withPath('path/to/act<>ion');
$newUri->getPath(); // 'path/to/act%3C%3Eion'
$newUri->getRawPath(); // 'path/to/act<>ion'
$newUri = $uri->withPath('path/to/act%3C%3Eion');
$newUri->getPath(); // 'path/to/act%3C%3Eion'
$newUri->getRawPath(); // 'path/to/act%3C%3Eion'
$newUri = $uri->withPath('/path/to/action');
$newUri->getPath(); // '/path/to/action'
$newUri->getRawPath(); // '/path/to/action'
$newUri = $uri->withPath('/path/to/action/');
$newUri->getPath(); // '/path/to/action/'
$newUri->getRawPath(); // '/path/to/action/'
$newUri = $uri->withPath('///path/to/action///');
$newUri->getPath(); // '/path/to/action/'
$newUri->getRawPath(); // '///path/to/action///'
$uri->withPath('path/to/action?query=string') // throws InvalidArgumentException
$uri->withPath('path/to/action#fragment') // throws InvalidArgumentException # withQuery
Возвращает новый экземпляр HttpSoft\Uri\Uri с указанным компонентом строки запроса из URI в соответствии с RFC 3986 Query.
public function withQuery($query): UriInterface; $query может быть либо пустым, либо начинаться со знака вопроса, либо не начинаться со знака вопроса. Если $query содержит символ #, будет брошено исключение \InvalidArgumentException.
$newUri = $uri->withQuery('?qu$ery');
$newUri->getQuery(); // 'qu%24ery'
$newUri->getRawQuery(); // '?qu$ery'
$newUri = $uri->withQuery('?qu%24ery');
$newUri->getQuery(); // 'qu%24ery'
$newUri->getRawQuery(); // '?qu%24ery'
$newUri = $uri->withQuery('query=str<>ing');
$newUri->getQuery(); // 'query=str%3C%3Eing'
$newUri->getRawQuery(); // 'query=str<>ing'
$newUri = $uri->withQuery('query=str%3C%3Eing');
$newUri->getQuery(); // 'query=str%3C%3Eing'
$newUri->getRawQuery(); // 'query=str%3C%3Eing'
$newUri = $uri->withQuery('?key1=value1&key2=value2');
$newUri->getQuery(); // 'key1=value1&key2=value2'
$newUri->getRawQuery(); // '?key1=value1&key2=value2'
$uri->withQuery('query=string#fragment') // throws InvalidArgumentException # withFragment
Возвращает новый экземпляр HttpSoft\Uri\Uri с указанным компонентом фрагмента (хеша) из URI в соответствии с RFC 3986 Fragment.
public function withFragment($fragment): UriInterface; $fragment может содержать любую строку, может начинаться с символа #, а может не начинаться с символа #.
$newUri = $uri->withQuery('frag<>ment');
$newUri->getQuery(); // 'frag%3C%3Ement'
$newUri->getRawQuery(); // 'frag<>ment'
$newUri = $uri->withQuery('#frag<>ment');
$newUri->getQuery(); // 'frag%3C%3Ement'
$newUri->getRawQuery(); // '#frag<>ment'
$newUri = $uri->withQuery('#frag%3C%3Ement');
$newUri->getQuery(); // 'frag%3C%3Ement'
$newUri->getRawQuery(); // '#frag%3C%3Ement' 