迅睿CMS 目录结构逐层拆:dayrui 里到底放了什么

· 迅睿CMS · 阅读 19
摘要

迅睿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为例:

  1. index.php定义 BASEPATH、APPPATH 等常量,require 启动文件
  2. 启动文件加载 dayrui/Config/ 下的全局配置
  3. 路由解析出模块news、控制器show、参数id=5
  4. 进入App/news/Controllers/Show.php
  5. 控制器取模型数据,渲染template/下的模板

伪静态开启后,这套 s= 参数会被 URL 重写规则转换掉,但内部路由逻辑不变——迅睿的路由始终基于 query 参数,伪静态只是入口层的改写,这点和 ThinkPHP 的 pathinfo 路由完全不同,理解错了写规则必翻车。

五、改动边界建议

三条硬规矩:

  • dayrui/CodeIgniter/不改,升级会覆盖
  • dayrui/Core/尽量不改,非改不可就记下改了什么
  • 业务代码全放dayrui/App/你的模块/,升级时整目录保留

下一篇聊模块的创建流程和 App.php 里那几个必填项到底管什么。