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(bool $preserveCase = false): string
Возвращает путь без начальных и конечных символов /.
По умолчанию путь приводится к нижнему регистру. Передайте true, чтобы сохранить исходный регистр символов.
Для URL https://example.com/Catalog/Item:
$path = CurrentUrl::path(); // catalog/item
$originalPath = CurrentUrl::path(true); // Catalog/ItemДля корневого URL возвращается пустая строка.
Параметр не влияет на url(), segment() и segments(): путь в их результатах остаётся в нижнем регистре.
segment(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 - хост и схема приводятся к нижнему регистру
- путь по умолчанию приводится к нижнему регистру;
path(true)сохраняет исходный регистр - query-строка сохраняет исходный регистр
- путь декодируется через
rawurldecode()