迅睿CMS 模块怎么建:App.php 里那几个必填项到底管什么
迅睿CMS里「应用」和「模块」共用 App.php 文件却不是一回事,选错了后面要推倒重来。这篇逐项过一遍 App.php 里的 name、目录名、类型、所属应用这几个关键项各自决定什么,模块建好之后为什么前台没有入口、菜单和内容模型为什么必须跟着一起建,以及克隆模块和新建模块的区别。
上一篇拆完目录,这篇讲建模块。迅睿的「模块」和「应用」是同一个东西——你在后台点「创建应用」,得到的是一套可装卸的骨架;点「创建模块」,得到的是一个带内容表的应用。两者共用 App.php,只是后者会自动生成数据表和字段管理界面。
一、两种创建方式,别选错
后台「模块 → 应用管理」里有两个入口,很多人第一次就选岔:
- 创建应用:纯功能应用,没有内容表。适合做接口、工具页、数据看板。
- 创建模块:自带内容主表(
模块名_内容表、模块名_栏目表、模块名_分类表),适合做文章、产品、下载这类有列表和详情的内容型站点。
选错不是不能改,但要把已建的表和路由全部重来,代价比一开始想清楚大得多。判据很简单:这个东西需不需要「一条条内容 + 列表页 + 详情页」?需要就建模块,不需要就建应用。
二、App.php 必填项逐条说
生成的 dayrui/App/你的模块/Config/App.php 大概长这样:
<?php
return [
'name' => '新闻中心',
'type' => 'module',
'uri' => 'news',
'version' => '1.0',
'author' => 'yourname',
'dirname' => 'news',
'share' => 1,
'related' => [],
];
| 键 | 作用 | 踩坑点 |
|---|---|---|
name | 后台显示名 | 可改,不影响数据 |
type | module / app | 建完别改,改了加载器走错分支 |
uri | URL 里的模块标识 | 改了旧链接全 404,需配重定向 |
dirname | 目录名,须与 App 下文件夹一致 | 手改目录名必同步改这里,否则应用消失 |
related | 依赖的其它模块/应用 | 漏写会导致依赖的菜单、权限不加载 |
最常见的两个事故:手工拷贝应用目录改名,忘了改 dirname ——后台列表里直接看不到这个应用;改了 uri 却没做重定向——搜索引擎里攒的链接一夜归零。
三、Routes.php 和查询参数式路由
迅睿的路由文件不是常见的正则路径匹配,而是把 URL 段映射到 模块/控制器/方法:
<?php
return [
'show/(:num)' => 'show/index/$1',
'list/(:num)' => 'list/index/$1',
];
但注意——默认访问形式仍是 index.php?s=news&c=show&id=5。Routes.php 只在开启伪静态、且入口做了重写之后才起作用。所以调路由前先确认伪静态规则已经生效,否则你在 Routes.php 里改半天,访问带 s= 的老地址依然原样返回。
四、Menu.php:后台菜单挂不上就是这里
<?php
return [
[
'name' => '新闻管理',
'uri' => 'news/admin/index',
'icon' => 'fa fa-newspaper-o',
],
[
'name' => '添加新闻',
'uri' => 'news/admin/add',
'pmenu' => '新闻管理',
],
];
pmenu 指向父菜单的 name,不是 uri。写成 uri 会得到一个永远折叠不开的孤立项。菜单改动后必须清缓存,否则 cache/ 里的旧菜单表还在。
五、安装与卸载
模块根目录的 Install.php 负责建表、写初始数据、注册权限。两个要点:
- 建表用框架的数据库迁移接口,别手写裸 SQL,否则字段前缀在多站点下会错
- 卸载逻辑里不要默认删数据表,做成「保留数据」选项,用户误删过一次就再也不敢装了
六、一个最小可跑顺序
- 后台创建模块,填模块名和 uri
- 检查生成的
App.php,确认dirname与目录一致 - 去「模块 → 内容模型」加字段
- 写
Menu.php,清缓存,确认后台菜单出现 - 前台访问
index.php?s=你的uri验证路由通 - 再开伪静态,配重写规则
下一篇讲模板标签——{dr_...} 那套语法和它背后的查询缓存。