CurrentUrl
CurrentUrl предоставляет данные URL текущего HTTP-запроса через статические методы.Поддерживает
- получение полного URL
- получение схемы и хоста
- получение пути и его сегментов
- получение query-строки и параметров
- определение AJAX-запроса WebSource
- проверку URL, переданного AJAX-запросом
Быстрый старт
$url = CurrentUrl::url();
$path = CurrentUrl::path();
$page = CurrentUrl::segment(0);
$parameter = CurrentUrl::parameter('page');Создавать экземпляр класса не нужно.
Получение URL
url(): string
Возвращает полный URL текущего запроса.
$url = CurrentUrl::url();Пример результата:
https://example.com/catalog/item?page=2origin(): string
Возвращает схему, хост и порт, если он указан.
$origin = CurrentUrl::origin();Пример результата:
https://example.comhost(): string
Возвращает хост без схемы.
$host = CurrentUrl::host();scheme(): string
Возвращает схему запроса: http или https.
$scheme = CurrentUrl::scheme();Работа с путём
path(): string
Возвращает путь без начального и конечного символа /.
Путь приводится к нижнему регистру.
$path = CurrentUrl::path();Для URL:
https://example.com/Catalog/Itemметод вернёт:
catalog/itemsegment(int $index): ?string
Возвращает сегмент пути по индексу или null, если сегмент отсутствует.
$section = CurrentUrl::segment(0);
$page = CurrentUrl::segment(1);segments(): array
Возвращает все сегменты пути.
$segments = CurrentUrl::segments();Для пути catalog/item результат будет следующим:
[
'catalog',
'item'
]Query-параметры
query(): string
Возвращает query-строку без символа ?.
$query = CurrentUrl::query();Если query-строка отсутствует, метод возвращает пустую строку.
parameter(string $key): string|array|null
Возвращает значение query-параметра или null, если параметр отсутствует.
$page = CurrentUrl::parameter('page');Массивы в query-строке обрабатываются стандартной функцией PHP parse_str():
filter[color]=blue&filter[size]=large$filter = CurrentUrl::parameter('filter');Результат:
[
'color' => 'blue',
'size' => 'large'
]AJAX-запросы
isAjax(): bool
Возвращает true, если запрос распознан как AJAX-запрос WebSource.
if (CurrentUrl::isAjax()) {
// Обработка AJAX-запроса
}Для определения AJAX-запроса используются заголовки:
ws-ajaxwas-urlsec-fetch-mode
URL из was-url принимается только при совпадении схемы, хоста и порта с текущим запросом. Внешний URL вызывает исключение.
При обычном переходе методы класса используют URL текущего HTTP-запроса. При подтверждённом AJAX-запросе они используют URL страницы из was-url.
Исключения
| Исключение | Когда возникает |
|---|---|
RuntimeException |
Хост запроса отсутствует или содержит недопустимые символы. |
RuntimeException |
Не удалось разобрать URL текущего запроса. |
RuntimeException |
Путь содержит обратную косую черту, управляющие символы, . или ... |
RuntimeException |
AJAX-заголовок содержит некорректный или внешний URL. |
Ограничения и замечания
- класс работает только с URL текущего запроса
- класс не предназначен для разбора произвольных URL
- схема определяется по
REQUEST_SCHEME,HTTPSилиSERVER_PORT - хост, схема и путь приводятся к нижнему регистру
- query-строка сохраняет исходный регистр
- путь декодируется через
rawurldecode()