Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp8_NaiveVue/zh/guide/overview.md
T
2026-09-29 10:14:04 +08:00

88 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 3.1 概述与目标
:::tip 概述
本章以项目内置的 **example(案例演示)** 模块为例,从数据库建表到前端页面联调,手把手演示开发全流程。学完本章后,您将掌握新增业务模块的标准步骤。
:::
## 开发流程总览
```text
┌──────────┐
│ 1. 建表 │ 创建数据库表(含公共字段)
└────┬─────┘
│
▼
┌──────────┐
│ 2. Model │ 创建数据模型(继承 BaseModel)
└────┬─────┘
│
▼
┌──────────┐
│ 3. Validate│ 创建验证器 + Logic 配置 validateClass
└────┬─────┘
│
▼
┌──────────┐
│ 4. Logic │ 创建逻辑层(配置属性 + 钩子)
└────┬─────┘
│
▼
┌──────────┐
│ 5. Controller│ 创建控制器(注解 + 异常处理)
└────┬─────┘
│
▼
┌──────────┐
│ 6. Route │ 注册路由
└────┬─────┘
│
▼
┌──────────┐
│ 7. Menu │ 配置菜单权限(可选)
└────┬─────┘
│
▼
┌──────────┐
│ 8. Frontend│ 前端 API + 页面([详见第 9 章](/zh/frontend/overview.html))
└──────────┘
```
## 开发约定
| 约定 | 说明 | 示例 |
|------|------|------|
| 表名 | `think_` 前缀 + 小写下划线 | `think_example` |
| 字段名 | 小写下划线 | `create_time`、`user_id` |
| 主键 | 统一使用 `id`,INT 自增 | `id INT PRIMARY KEY AUTO_INCREMENT` |
| Model | 继承 `BaseModel`,类名与表名对应 | `class Example extends BaseModel` |
| Logic | 继承 `BaseLogic` 或 `BaseTenantLogic` | `class ExampleLogic extends BaseLogic` |
| Controller | 继承 `BaseController` | `class ExampleController extends BaseController` |
| 权限码 | `sys:模块名:操作` | `sys:example:add` |
| 路由 | RESTful 风格 | `GET /api/example/page` |
## 本章示例
本章以项目内置的 **example(案例演示)** 模块为例,完整演示从建表到联调的全过程。该模块是代码生成器的参考模板,涵盖了标准 CRUD 的所有典型场景:
- 分页列表(支持名称模糊搜索、类型和状态精确过滤)
- 全量列表
- 详情查询
- 新增(含头像上传)
- 修改
- 删除 / 批量删除
- Excel 导入导出
- 权限控制(#[Permission] 注解)
- 操作日志(#[Log] 注解)
- 枚举显示名翻译(type / status 字典映射)
## 涉及文件
```text
app/model/Example.php # 数据模型
app/validate/ExampleValidate.php # 验证器
app/logic/ExampleLogic.php # 业务逻辑
app/controller/ExampleController.php # 控制器
route/app.php # 路由(第371行)
ui/src/api/tool/example.ts # 前端 API 模块
ui/src/views/tool/example/ # 前端页面
```