迅睿CMS 目录结构逐层拆:dayrui 里到底放了什么
迅睿CMS把框架、应用、配置全部收在 dayrui 目录里,网站根目录只剩几个入口文件,这是初次接触时最容易看错结构的地方。这篇按「入口文件 → 框架层 → 应用层 → 数据层」的顺序逐层拆开 dayrui,说清每个子目录归谁管、哪些可以动、哪些碰了会出问题,以及为什么升级时不能整个目录覆盖。
第一次打开迅睿CMS的安装包,最迷惑的是根目录下那个dayrui——所有和框架有关的东西全塞在里面,根目录只剩几个入口文件。这篇按「入口 → 框架 → 应用 → 数据」的顺序把每一层拆开。
一、根目录:只有入口,没有逻辑
根目录下能看到的文件极少:
index.php 前台入口
admin.php 后台入口(部分版本为 adminxxx.php)
api.php 接口入口
install/ 安装程序,装完建议删除
static/ 公共静态资源
cache/ 运行时缓存(模板编译、配置缓存)
uploadfile/ 用户上传文件
dayrui/ 框架与应用主体
几个入口文件内容高度相似,都是定义常量后require进dayrui下的启动文件。所以你改业务逻辑永远不该动这几个入口。
二、dayrui 下四层结构
dayrui/
├── CodeIgniter/ CI 框架内核(基本不用改)
├── Core/ 迅睿的框架层:路由扩展、钩子、模型基类
├── App/ 应用目录,每个子目录是一个应用
│ ├── Admin/ 后台应用
│ ├── Install/ 安装应用
│ └── 你的模块名/ 自定义模块
├── ThirdParty/ 第三方类库
└── Config/ 全局配置
Core 层:钩子和模型基类都在这
dayrui/Core/里最该先看的是Hooks.php和Controller.php。前者是全局钩子注册表,后者是所有控制器的父类。你要写模块,继承的就是这里的基类。
App 层:一个目录=一个可装可卸的应用
这是迅睿和 Z-Blog、WordPress 最大的差别——它把「模块」和「插件」统一成应用。每个应用目录里有固定结构:
App/你的模块/
├── Config/
│ ├── App.php 应用信息:名称、版本、依赖
│ ├── Routes.php 路由规则
│ ├── Menu.php 后台菜单项
│ └── Autoload.php 自动加载配置
├── Controllers/ 控制器
├── Models/ 模型
├── Views/ 后台视图
└── Install.php 安装/卸载逻辑
新建一个模块不是手动建目录,而是后台「模块 → 应用管理 → 创建应用」,系统会按模板生成这套骨架。手写骨架极易漏掉 App.php 里的依赖声明,导致应用装上后菜单不出现。
三、缓存目录为什么总在变
cache/下会按站点ID、模块名分目录。模板编译产物、配置缓存、数据缓存全在里面。调试时改了模板没生效,八成是这里没清——后台「系统 → 缓存管理 → 更新缓存」会整目录重刷。
线上环境别把cache/设成 777 了事,正确做法是让 PHP 运行用户拥有该目录写权限即可。
四、一条请求的完整路径
以访问/index.php?s=news&c=show&id=5为例:
index.php定义BASEPATH、APPPATH等常量,require 启动文件- 启动文件加载
dayrui/Config/下的全局配置 - 路由解析出模块
news、控制器show、参数id=5 - 进入
App/news/Controllers/Show.php - 控制器取模型数据,渲染
template/下的模板
伪静态开启后,这套 s= 参数会被 URL 重写规则转换掉,但内部路由逻辑不变——迅睿的路由始终基于 query 参数,伪静态只是入口层的改写,这点和 ThinkPHP 的 pathinfo 路由完全不同,理解错了写规则必翻车。
五、改动边界建议
三条硬规矩:
dayrui/CodeIgniter/不改,升级会覆盖dayrui/Core/尽量不改,非改不可就记下改了什么- 业务代码全放
dayrui/App/你的模块/,升级时整目录保留
下一篇聊模块的创建流程和 App.php 里那几个必填项到底管什么。