# SentCMS SentCMS 是基于 **ThinkPHP 6.x** 的内容管理系统,采用单应用架构,通过控制器命名空间划分四个模块:后台管理(admin)、前台展示(front)、用户中心(user)、API接口(api)。 > 由南昌腾速科技有限公司开发维护,遵循 Apache-2.0 开源协议。 ## 环境要求 | 依赖 | 版本 | |------|------| | PHP | >= 7.1 | | MySQL | 5.5+ | | 扩展 | pdo_mysql, mbstring, json, openssl, tokenizer | 生产环境推荐:Linux + Nginx + PHP-FPM + MySQL。 ## 快速安装 ```bash # 克隆项目 git clone https://gitee.com/sentcms/sentcms.git sentcms cd sentcms # 安装依赖 composer install # 配置环境变量 cp .example.env .env # 编辑 .env 文件,填写数据库连接信息 ``` 将网站根目录指向 `public/`,然后访问 `http://你的域名/install.php` 完成安装。 > **URL 伪静态必须开启**,否则路由无法正常工作。Apache 用户使用 `public/.htaccess`,Nginx 用户需自行配置 rewrite 规则。 ## 目录结构 ``` ├─ addons/ 扩展插件目录 ├─ app/ 应用核心代码 │ ├─ controller/ 控制器 │ │ ├─ admin/ 后台管理控制器(权限控制、RBAC) │ │ ├─ api/ API 接口控制器(JWT 认证) │ │ ├─ front/ 前台展示控制器(公开访问) │ │ └─ user/ 用户中心控制器(Session 认证) │ ├─ http/ HTTP 服务层 │ │ ├─ form/ 自定义表单引擎 │ │ ├─ middleware/ 中间件(Admin, Api, ApiAuth, Validate) │ │ └─ validate/ 自动验证器 │ ├─ model/ 数据模型(按业务域分目录) │ ├─ services/ 业务逻辑服务层 │ └─ common.php 全局辅助函数 ├─ config/ 应用配置文件 ├─ extend/ 自定义类库 │ ├─ com/ Database, Datatable, Sent 标签库, Version │ └─ doc/ 文档注释解析器 ├─ public/ 网站根目录(对外访问) │ ├─ static/ 静态资源(CSS/JS/图片/插件) │ ├─ template/ 前台主题模板目录 │ ├─ uploads/ 上传文件目录 │ ├─ index.php 入口文件 │ └─ install.php 安装向导 ├─ route/ │ └─ app.php 路由定义(含动态内容模型路由) ├─ view/ 后台视图模板 │ └─ admin/ 后台管理界面模板 ├─ runtime/ 运行时目录(缓存/日志/会话/备份) ├─ .example.env 环境配置模板 └─ composer.json Composer 依赖配置 ``` ## 核心特性 - **单应用架构** — 四个模块通过控制器命名空间 `app\controller\{admin,front,user,api}` 划分,非 ThinkPHP 多应用模式 - **动态内容模型** — 通过后台创建内容模型,自动注册路由,所有内容类型共用 `Content` 控制器 - **RBAC 权限系统** — 基于节点的权限控制,权限细化到按钮级别,支持超级管理员(`rootuid` 配置) - **JWT API 认证** — API 模块使用 JWT Token 认证,支持跨域访问 - **插件系统** — 通过 `addons/` 目录扩展功能,支持钩子事件机制 - **自定义表单引擎** — `app/http/form/` 提供灵活的表单构建能力 - **多主题支持** — 前台模板位于 `public/template/`,支持 PC/移动端主题自动切换 - **自定义标签库** — `com\Sent` ThinkPHP 标签库,预加载到模板引擎 ## 认证机制 | 模块 | 认证方式 | 说明 | |------|---------|------| | admin | Session + RBAC | `Admin` 中间件,Session 存储于 `adminInfo`,权限通过 `sent\auth\Auth` 校验 | | api | JWT Token | `ApiAuth` 中间件,Token 过期返回 code 2001,无效返回 code 2000 | | user | Session | `user\Base::initialize()` 中检查登录状态,未登录重定向至登录页 | | front | 无 | 公开访问 | ## 环境变量说明 编辑 `.env` 文件(从 `.example.env` 复制): ```ini APP_DEBUG = false # 调试模式 VERSION = 4.0.5 # 版本号(后台展示) rootuid = 1 # 超级管理员用户 ID [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = your_database USERNAME = root PASSWORD = your_password HOSTPORT = 3306 CHARSET = utf8 PREFIX = sent_ # 表前缀 [JWT] SECRET = your_jwt_secret # JWT 签名密钥 ``` ## 主要依赖 | 包名 | 用途 | |------|------| | topthink/framework ^6.0 | ThinkPHP 核心框架 | | sent/think-auth ^1.2 | RBAC 权限管理 | | sent/think-jwt ^1.0 | JWT 认证 | | sent/think-addons ^1.0 | 插件系统 | | overtrue/wechat ^4.2 | 微信 SDK | | topthink/think-captcha ^3.0 | 验证码 | | liliuwei/thinkphp-jump ^1.4 | 控制器跳转 trait | ## 开发指南 ### 新增后台控制器 1. 创建 `app/controller/admin/{Name}.php`,继承 `app\controller\admin\Base` 2. 创建对应视图目录 `view/admin/{name}/` 3. 路由自动匹配:`admin/{name}/{action}` 4. 在 `auth_menu` 数据表中添加菜单项 ### 新增 API 接口 1. 在 `app/controller/api/{Name}.php` 中添加方法,继承 `app\controller\api\Base` 2. 路由自动匹配:`api/{name}/{action}` 3. 默认启用 JWT 认证(`login`/`register` 除外) ### 新增内容模型 通过后台管理界面创建 → 系统自动注册动态路由。内容模型统一映射到 `Content` 控制器处理。 ### 新增插件 1. 创建 `addons/{name}/` 目录,包含 `controller/Admin.php` 和 `view/` 模板 2. 在 `addons` 配置和数据库表中注册 ## 注意事项 - **勿删** `install.lock` — 它是安装锁文件,防止重复安装 - **勿提交** `.env` — 已在 `.gitignore` 中忽略 - `composer.lock` 已忽略 — 每次需 `composer install` 重新生成 - `runtime/` 和 `public/uploads/` 目录需可写权限 - 前台模板在 `public/template/` 而非 `view/`(`view/` 仅存放后台模板) - 内容模型控制器是虚拟的,所有路由映射到 `Content` 控制器 ## 在线预览 - 演示地址:http://www.sentcms.com/ - 账号:admin / admin888(请勿修改密码或删除数据) - 交流社区:http://bbs.sentcms.com ## 版本历史 - **4.x**(当前):https://gitee.com/sentcms/sentcms — 基于 ThinkPHP 6.x - **3.x**:历史版本,基于 ThinkPHP 3.x/5.x ## 许可证 [Apache-2.0](LICENSE.txt)