При построении url в коде можно собрать всё строками с конкатенацией вида
<?php
$url = $domain.'/index.php?option='.$option.'&view='.$view.'¶m1='.$value1;
и для небольших строк это может быть даже и удобно. Но если параметров много или они требуют стандартизации / чистки в процессе, то уже не все так удобно и очевидно. Например, в части url может быть ведущий слеш (слеш в начале фрагмента url) и пришедший домен для запроса тоже может оканчиваться на слеш - и вот мы получаем некорректный url для запроса с двойным слешем где-нибудь в середине...
Для задач стандартизации и единообразия получения url в Joomla есть класс Joomla\Uri\Uri
. Раньше, с Joomla 1.6 и старше он назывался JUri
. Этот класс обеспечивает работу с url по стандарту RFC3986 и берет на себя работу по разбору url на запчасти или по сборке url из запчастей ))
Пример: получить конкретный параметр из url в Joomla
<?php
use Joomla\Uri\Uri;
$url = 'https://web-tolk.ru/dev/biblioteki?param=value';
$uri = new Uri($url);
// здесь выведет строку 'value'
echo $uri->getVar('param');
Да, есть же нативная PHP функция parse_url
, скажете вы... Но класс Uri обеспечивает безопасную работу с UTF-8 в url, в том числе с кириллическими доменами. Дабы не писать различные проверки самостоятельно - можно воспользоваться возможностями ядра Joomla.
Как собрать нужный url PHP кодом в Joomla
Тут тоже все просто:
<?php
use Joomla\Uri\Uri;
$uri = new Uri;
$uri->setHost('web-tolk.ru');
$uri->setScheme('https');
// setPath() начинаем со слеша
$uri->setPath('/dev/biblioteki');
// GET-параметры можно передать массивом
$vars = [
'param1' => 'value1',
'param2' => 'value2',
'param3' => 'value3',
];
$uri->setQuery($vars);
// выводим в строку наш url
echo $uri->toString();
Иерархия классов Uri
в Joomla сделана так, что методы-геттеры находятся в классе AbstractUri
, а сеттеры - в классе Uri
. Сеттеры можно посмотреть в файле libraries/vendor/joomla/uri/src/Uri.php. Геттеры смотрим в файле libraries/vendor/joomla/uri/src/AbstractUri.php.
Если у вас есть PHP Storm, то он прекрасно знает Joomla и подсказывает всё, что нужно.
Ну и можно дать ссылку на страницу старой документации, которая до сих пор в большей своей части актуальна с поправкой на использование неймспейсов.
А это структура Url для общего понимания:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment