跳至主要内容
版本:5.1

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 文档 中描述的类,位于 Joomla CMS 端。

'Joomla\SomethingElse' 指向 libraries/vendor/somethingelse/src。

例如 'Joomla\Event' 指向 libraries/vendor/event/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 命名空间,站点和管理员模型的 FQN 不同,因为它们位于不同的命名空间中。这使得在它们之间共享代码变得非常容易 - 您只需让一个模型类继承另一个模型类即可。

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

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

class ExampleModel extends AdministratorModel {

警告:尽管 Joomla 为所有类都提供了唯一的 FQN,但 **某些 Joomla 库类共享 FQN 的相同最后一个部分**,例如

  • Registry 可能指的是 Joomla\Registry\Registry(用于保存数据结构的实用程序类)或 Joomla\CMS\HTML\Registry(用于保存 HtmlHelper::_() 调用中使用的 HTML 片段的类)

  • CategoryFactory 可能指的是 Joomla\CMS\Extension\Service\Provider\CategoryFactory 或 Joomla\CMS\Categories\CategoryFactory - 在一些类似情况下,FQN 的相同最后一个部分可能指的是 Factory 类或在依赖注入容器中注册 Factory 类的服务提供者类。

  • DispatcherInterface 可能指的是 Joomla\CMS\Dispatcher\DispatcherInterface(组件和模块的 DispatcherInterface)或 Joomla\Event\DispatcherInterface(插件的 DispatcherInterface)。

您只需要注意检查 use 语句,以查看究竟引用了哪个类。