迅睿通过 PSR-4 风格自动加载解析类文件,并用 \Phpcmf\Service 门面统一获取类库、模型、视图等对象。理解命名空间映射与加载优先级,是二次开发与应用开发的基础。
在 System/Init.php 中注册 \Phpcmf\Auto。加载配置由 \Phpcmf\Service::Auto() 组装,包括:
核心 PSR-4 / classmap
已安装应用的 Config/Auto.php(可追加命名空间与 classmap)
同时加载已安装应用的 Hooks.php、Filters.php、Mwhere.php 等
| 命名空间 | 目录 | 说明 |
|---|---|---|
Phpcmf\Control | dayrui/Fcms/Control/ | 系统核心控制器 |
Phpcmf\Controllers | {APPPATH}/Controllers/ | 当前应用控制器 |
Phpcmf\Library | dayrui/Fcms/Library/ | 系统类库 |
Phpcmf\Field | dayrui/Fcms/Field/ | 字段类型 |
Phpcmf\Extend | dayrui/System/Extend/ | 框架扩展(如 Run) |
My\Library / My\Model / My\Field | dayrui/My/... | 二次开发覆盖 |
CodeIgniter / Config | FRAMEPATH 及其 Config | 底层框架相关 |
核心基类多通过 classmap 固定路径,例如:
Phpcmf\Common → Fcms/Core/Common.php(控制器公共基类)
Phpcmf\App → Fcms/Core/App.php
Phpcmf\Model → Fcms/Core/Model.php
Phpcmf\View → Fcms/Core/View.php
Phpcmf\Table → Fcms/Core/Table.php
若已安装建站模块(IS_USE_MODULE),部分类(如 Phpcmf\Model\Content)会映射到模块扩展路径。
在应用目录创建 Config/Auto.php,返回数组可追加 psr4、classmap。仅当应用存在 install.lock 时才会被 Service::Auto() 合并。
\Phpcmf\Service 是统一入口,常用方法如下:
| 方法 | 作用 | 示例 |
|---|---|---|
L($name, $namespace = '') | 获取类库对象(单例) | \Phpcmf\Service::L('cache') |
M($name = '', $namespace = '') | 获取模型;M() 无参返回模型基类实例 | \Phpcmf\Service::M('auth') |
V() | 模板视图对象 | \Phpcmf\Service::V()->display('xxx.html') |
C() | 当前控制器实例 | \Phpcmf\Service::C() |
R($file) | require 并缓存文件返回值 | 读取配置 PHP 文件 |
H($name, $namespace) | 加载应用 Helpers | \Phpcmf\Service::H('xxx', 'app') |
Apps($is_install = 0) | 扫描应用列表;传 1 仅已安装 | \Phpcmf\Service::Apps(1) |
Filters() | CSRF 等过滤器白名单 URI | 按前台/会员/后台场景返回 |
Helper 中提供同名简化函数:XR_L()、XR_M()、XR_V()、XR_C()、XR_R()、XR_H()、XR_DB()(数据库连接)。
Service::L() / Service::M() 按「核心文件 + 可覆盖文件」解析(应用类库目录名为 Libraries/,模型为 Models/):
优先加载核心 Fcms/Library|Model/{Name}.php。
若存在 My/Library|Model/{Name}.php,则作为覆盖类(命名空间 My\...)。
指定 $namespace(应用名)时,可加载该应用下对应文件,并实例化为 \Phpcmf\Library\{App}\{Name} 或 \Phpcmf\Model\{App}\{Name}。
核心不存在该类时,可直接使用应用或 My 目录中的实现。
调用示例:
// 系统类库
\Phpcmf\Service::L('router');
// 指定应用命名空间的类库/模型
\Phpcmf\Service::L('xxx', 'news');
\Phpcmf\Service::M('content'); // 建站模块相关模型会自动关联 module覆盖系统类库/模型:放到 dayrui/My/Library/ 或 dayrui/My/Model/,类名与核心一致。
应用私有能力:写在应用 Libraries/、Models/,并通过 Service::L/M($name, $app) 或 Auto.php 注册命名空间引入。
不要修改 Fcms/ 内类文件;升级时 My 与 App 中的扩展可保留。
对象多为单例缓存,同一请求内重复 L/M 同一标识会复用实例。