CurrentUrl


CurrentUrl предоставляет данные URL текущего HTTP-запроса через статические методы.

Поддерживает

  • получение полного URL
  • получение схемы и хоста
  • получение пути и его сегментов
  • получение query-строки и параметров
  • определение AJAX-запроса WebSource
  • проверку URL, переданного AJAX-запросом

Быстрый старт

php
$url = CurrentUrl::url();
$path = CurrentUrl::path();
$page = CurrentUrl::segment(0);
$parameter = CurrentUrl::parameter('page');

Создавать экземпляр класса не нужно.

Получение URL

url(): string

Возвращает полный URL текущего запроса.

php
$url = CurrentUrl::url();

Пример результата:

text
https://example.com/catalog/item?page=2

origin(): string

Возвращает схему, хост и порт, если он указан.

php
$origin = CurrentUrl::origin();

Пример результата:

text
https://example.com

host(): string

Возвращает хост без схемы.

php
$host = CurrentUrl::host();

scheme(): string

Возвращает схему запроса: http или https.

php
$scheme = CurrentUrl::scheme();

Работа с путём

path(): string

Возвращает путь без начального и конечного символа /.

Путь приводится к нижнему регистру.

php
$path = CurrentUrl::path();

Для URL:

text
https://example.com/Catalog/Item

метод вернёт:

text
catalog/item

segment(int $index): ?string

Возвращает сегмент пути по индексу или null, если сегмент отсутствует.

php
$section = CurrentUrl::segment(0);
$page = CurrentUrl::segment(1);

segments(): array

Возвращает все сегменты пути.

php
$segments = CurrentUrl::segments();

Для пути catalog/item результат будет следующим:

php
[
    'catalog',
    'item'
]

Query-параметры

query(): string

Возвращает query-строку без символа ?.

php
$query = CurrentUrl::query();

Если query-строка отсутствует, метод возвращает пустую строку.

parameter(string $key): string|array|null

Возвращает значение query-параметра или null, если параметр отсутствует.

php
$page = CurrentUrl::parameter('page');

Массивы в query-строке обрабатываются стандартной функцией PHP parse_str():

text
filter[color]=blue&filter[size]=large
php
$filter = CurrentUrl::parameter('filter');

Результат:

php
[
    'color' => 'blue',
    'size' => 'large'
]

AJAX-запросы

isAjax(): bool

Возвращает true, если запрос распознан как AJAX-запрос WebSource.

php
if (CurrentUrl::isAjax()) {
    // Обработка AJAX-запроса
}

Для определения AJAX-запроса используются заголовки:

  • ws-ajax
  • was-url
  • sec-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()