Совет по Joomla: использовать класс Joomla\Uri\Uri для создания URL

  • Понедельник, 17 февраля 2025
Совет по Joomla: использовать класс Joomla\Uri\Uri для создания URL

При построении 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

Эта статья на сайте автора.

Эта статья на dev.to.

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

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

Joomla-разработчик. Контрибьютер ядра Joomla. Муж. Отец 3 детей.

Россия, Саратов. https://web-tolk.ru info@web-tolk.ru

Статьи автора

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Логотип Joomla

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Свернуть

Коротко о главном в Joomla

Новости портала

Новое в блогах

Видео