Работа с URL-адресами в Bitrix является одним из важных моментов в работе всей системы. До появления ядра версии D7 работа с URL адресами производилась посредством классов CMain::GetCurPageParam и DeleteParam. На нашем сайте ранее публиковались примеры формирования URL с передачей многомерных массивов, а также произвольных URL посредством использования GetCurPageParam.
В D7 для работы с ссылками появился аналог этим классам – Uri. Работа с классом в некоторых моментах стала сложнее, т.к. каждый аспект работы класса стал более самостоятельным, реализованным в отдельных методах.
\Bitrix\Main\Web\Uri
В представлении класса Uri в системе Bitrix каждый URL является объектом, с параметрами которого класс и работает посредством отдельных методов. Поэтому в перед тем как работать с URL необходимо инициализировать объект класса Uri.
Создать объект класса Uri мы можем из обычной строки URL, после чего уже работать с этим объектом.
$uri = new \Bitrix\Main\Web\Uri('/script.php?param1=value1¶m2=value2');
Довольно часто приходится работать с параметрами URL текущей страницы. Для работы с URL текущей страницы аналогично необходимо создать объект класса Uri. Получить текущий URL, и создать объект класса для работы с ним можно таким образом:
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); $uri = new \Bitrix\Main\Web\Uri($request->getRequestUri());
После того как создан объект класса Uri, мы можем работать с методами класса. Так к примеру, мы можем получить составляющие части сайта.
// получить URL из объекта класса $url = $uri->getUri(); // метод возвращает путь $path = $uri->getPath(); // строка запроса (метод вернёт параметры строки запроса) $query = $uri->getQuery(); // так можно разбить параметры строки запроса в массив $arUrlParams parse_str($uri->getQuery(), $arUrlParams); // метод возвращает номер порта запроса, например 80 или 443 $port = $uri->getPort(); // протокол запроса, к примеру http или https $scheme = $uri->getScheme(); // метод возвращает путь с запросом $pathQuery = $uri->getPathQuery(); // имя хоста из запроса, например example.com $host = $uri->getHost(); // получение фрагмента URL, (параметры после знака #) $fragment = $uri->getFragment();
Таблица доступных методов в данный момент времени:
Метод | Описание | С версии |
---|---|---|
addParams | Метод добавляет параметры в запрос или заменяет существующие параметры. | 15.5.10 |
deleteParams | Метод удаляет параметры из запроса. | 15.5.10 |
getFragment | Метод возвращает фрагмент. | 14.0.15 |
getHost | Метод возвращает хост. | 14.0.15 |
getLocator | Метод возвращает URI без фрагмента. | 15.5.10 |
getPass | Метод возвращает пароль. | 14.0.15 |
getPath | Метод возвращает путь. | 14.0.15 |
getPathQuery | Метод возвращает путь с запросом. | 14.0.15 |
getPort | Метод возвращает номер порта. | 14.0.15 |
getQuery | Метод возвращает запрос | 14.0.15 |
getScheme | Метод возвращает схему. | 14.0.15 |
getUri | Метод возвращает URI с фрагментом, если он имеется. | 15.5.10 |
getUser | Метод возвращает пользователя. | 14.0.15 |
setHost | Метод устанавливает хост | 14.0.15 |
setPath | Метод устанавливает путь. | 15.5.10 |
setUser | Метод устанавливает пользователя. | 16.5.7 |
setPass | Метод устанавливает пароль. | 16.5.7 |
Методы класса Uri позволяют так же добавлять параметры в существующий URL, а также менять различные составляющие URL-адреса.
// задаём новый путь для URL $uri->setPath("/new-path/to/page.php"); // задаём порт $uri->setPort(80); // задаём протокол для URL $uri->setScheme("https"); // задаём имя хоста $uri->setHost("example.com"); // задаём фрагменты для URL (анкоры для ссылок, после знака - #) $uri->setFragment("anchor"); // добавление параметров $uri->addParams(array("param1"=>"value1","param2"=>"value2")); // удаление параметров $uri->deleteParams(array("param1"=>"value1","param2"=>"value2")); // удаление системных параметров $uri->deleteParams(\Bitrix\Main\HttpRequest::getSystemParameters());
Таким образом, можно довольно гибко оперировать данными URL в различных участках кода. К примеру, это может потребоваться тогда, когда необходимо сформировать URL-адреса для списка ссылок в шаблоне компонента. Класс будет работать везде где подключается ядро, Bitrix-а, поэтому его можно использовать как в компонентах, так и в отдельных скриптах-обработчиках, к примеру, в ajax.