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
语句,以查看究竟引用了哪个类。