При построении url в коде можно собрать всё строками с конкатенацией вида

<?php
$url = $domain.'/index.php?option='.$option.'&view='.$view.'&param1='.$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

 

 

Толкачев Сергей Юрьевич
Толкачев Сергей Юрьевич

Joomla-разработчик. Контрибьютер ядра Joomla. Один из ведущих Telegram-канала русскоязычного Joomla-сообщества JoomlaFeed, один из модераторов чата русскоязычного Joomla-сообщества. Мои расширения в официальном маркетплейсе расширений Joomla - Joomla Extensions Directory. Имею публикации в официальном журнале международного Joomla-сообщества - Joomla Community Magazine.

Муж. Отец 3 детей.

Россия, Саратов.

Расширения Joomla WebTolk

90 Всего расширений
11 Категорий
411 Выпущено версий
411521 Всего скачиваний
Корзина
Корзина пуста