02 - Префиксы пространства имен Joomla
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
, позволяющий точно увидеть, на какой класс ссылаются.