Joomla содержит префиксы пространства имен и их сопоставление с позицией в файловой системе для следующих целей:

Компоненты

'Joomla\Component\<Component name>\Administrator\' указывает на administrator/components/com_<component name>/src

'Joomla\Component\<Component name>\Site\' указывает на components/com_<component name>/src

'Joomla\Component\<Component name>\Api\' указывает на api/components/com_<component name>/src

например, 'Joomla\Component\Content\Administrator' указывает на administrator/components/com_content/src

Модули

'Joomla\Module\<Module name>\Administrator\' указывает на administrator/modules/mod_<module name>/src

'Joomla\Module\<Module name>\Site\' указывает на modules/mod_<module name>/src

например, 'Joomla\Module\Login\Site' указывает на modules/mod_login/src

Плагины

'Joomla\Plugin\<Plugin type>\<Plugin name>\' указывает на plugins/<plugin type>/<plugin name>/src

например, 'Joomla\Plugin\Fields\Calendar' указывает на plugins/fields/calendar/src

Библиотечные классы

'Joomla\CMS' указывает на libraries/src. Обратите внимание, что это классы, которые описаны в документах API на стороне CMS Joomla .

'Joomla\SomethingElse' указывает на библиотеки/поставщика/somethingelse/src.

например, 'Joomla\Event' указывает на libraries/vendor/somethingelse/src

Обратите внимание, что это классы, которые описаны в документах API на стороне Фреймворка .

(В качестве отступления, просто имейте в виду, что если класс на стороне CMS наследует от класса на стороне фреймворка, то не все доступные методы могут быть в документах API. Например, класс Joomla\CMS\Application\WebApplication имеет такие методы, как setHeader потому что она расширяет Joomla\Application\ AbstractWebApplication , но эта функция не указана в документе WebApplication API .)

Если имя класса библиотеки не начинается с 'Joomla', то оно будет найдено в одном из других каталогов в разделе libraries/vendor/ .

(Обратите внимание, что все вышеперечисленное является общим стандартом для кода Joomla – однако вы можете обнаружить странное исключение).

Если вы заглянете внутрь administrator/cache/autoload_psr4.php, вы увидите все префиксы пространства имен для компонентов, модулей и плагинов Joomla вместе с соответствующей позицией в файловой системе (а также префиксы пространства имен любых установленных расширений).

Повторяющиеся имена классов

До того, как было введено пространство имен, в Joomla было много повторяющихся имен классов, например. для com_example код модели MVC будет находиться в классе ExampleModelExample как для сайта, так и для администратора, причем оба класса находятся в глобальном пространстве имен. Это создавало препятствие для совместного использования кода - например, вы не могли просто наследовать класс модели вашего сайта от вашего класса модели администратора.

В Joomla namespacing полные доменные имена сайта и модели администратора разные, поскольку они находятся в разных пространствах имен. Это очень упрощает совместное использование кода между ними - вам просто нужно позволить одному классу модели наследовать от другого.

<?php
namespace Mycompany\Component\Example\Site\Model;

use Mycompany\Component\Example\Administrator\ExampleModel as AdministratorModel;

class ExampleModel extends AdministratorModel {

Небольшое предупреждение: хотя Joomla имеет уникальные полные имена для всех классов, есть некоторые классы библиотеки Joomla, которые используют один и тот же последний сегмент полного имени , например:

  • Registry может относиться к Joomla\Registry \ Registry (служебный класс для хранения структур данных) или Joomla \ CMS \ HTML \ Registry (класс для хранения фрагментов HTML, используемых в HtmlHelper::_() звонки)

  • CategoryFactory может ссылаться на Joomla \ CMS\ Extension\Service\Provider\CategoryFactory или Joomla \ CMS\ Categories\CategoryFactory - существует несколько похожих экземпляров, где один и тот же последний сегмент FQN может ссылаться на заводской класс или на класс поставщика услуг, который регистрирует заводской класс в контейнере внедрения зависимостей.

  • DispatcherInterface может относиться к Joomla\CMS\Dispatcher\DispatcherInterface (DispatcherInterface для компонентов и модулей) или Joomla\Event\DispatcherInterface (DispatcherInterface для плагинов).

Вам просто нужно быть осторожным, чтобы изучить оператор use , позволяющий точно увидеть, на какой класс ссылаются.