签入版本

This commit is contained in:
2026-10-08 17:50:29 +08:00
parent 809750b47e
commit e213a9b31d
444 changed files with 39366 additions and 37533 deletions
@@ -13,27 +13,27 @@
│
▼
┌──────────┐
│ 2. Model │ 创建数据模型(继承 BaseModel)
│ 2. Model │ 创建数据模型(模型 Trait 复用)
└────┬─────┘
│
▼
┌──────────┐
│ 3. Validate│ 创建验证器 + Logic 配置 validateClass
│ 3. FormRequest │ 创建表单请求验证(BaseRequest)
└────┬─────┘
│
▼
┌──────────┐
│ 4. Logic │ 创建逻辑层(配置属性 + 钩子)
│ 4. Service│ 创建业务服务(属性配置 + 钩子)
└────┬─────┘
│
▼
┌──────────┐
│ 5. Controller│ 创建控制器(注解 + 异常处理)
│ 5. Controller│ 创建控制器(注解 + 快捷方法)
└────┬─────┘
│
▼
┌──────────┐
│ 6. Route │ 注册路由
│ 6. Route │ 注册路由(routes/api.php)
└────┬─────┘
│
▼
@@ -51,38 +51,47 @@
| 约定 | 说明 | 示例 |
|------|------|------|
| 表名 | `think_` 前缀 + 小写下划线 | `think_example` |
| 表名 | 不含前缀,前缀由 `DB_PREFIX` 决定(默认 `laravel_`) | `example` → 实际 `laravel_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` |
| Model | 位于 `app/Models/`,`$table` 指定表名 | `protected $table = 'example'` |
| Service | 继承 `BaseService` 或 `BaseTenantService` | `class ExampleService extends BaseService` |
| Request | 继承 `BaseRequest`,`rules()` 声明规则 | `class ExampleRequest extends BaseRequest` |
| Controller | 位于 `app/Http/Controllers/Api/`,继承 `Controller` | `class ExampleController extends Controller` |
| 权限码 | `sys:模块名:操作` | `sys:example:add` |
| 路由 | RESTful 风格 | `GET /api/example/page` |
| 路由 | `routes/api.php`,RESTful 风格 | `GET /api/example/page` |
## 本章示例
本章以项目内置的 **example(案例演示)** 模块为例,完整演示从建表到联调的全过程。该模块是代码生成器的参考模板,涵盖了标准 CRUD 的所有典型场景:
- 分页列表(支持名称模糊搜索、类型和状态精确过滤)
- 分页列表(支持名称模糊搜索、状态精确过滤)
- 全量列表
- 详情查询
- 新增(含头像上传)
- 修改
- 删除 / 批量删除
- Excel 导入导出
- 权限控制(#[Permission] 注解)
- 操作日志(#[Log] 注解)
- 枚举显示名翻译(type / status 字典映射)
- 权限控制(`#[Permission]` 注解)
- 操作日志(`#[OperationLog]` 注解)
- 枚举显示名翻译(status 字典映射)
- 唯一性校验(`uniqueFields` 属性声明)
## 涉及文件
```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/ # 前端页面
```
app/Models/Example.php # 数据模型
app/Http/Requests/ExampleRequest.php # 表单请求验证
app/Services/ExampleService.php # 业务服务
app/Http/Controllers/Api/ExampleController.php # 控制器
routes/api.php # 路由(example 模块 9 条)
# 前端(独立 EleVue 仓库):
# ui/src/api/tool/example.ts # 前端 API 模块
# ui/src/views/tool/example/ # 前端页面
```
## 学习建议
1. 先通读 3.2~3.8 按顺序跟随 example 模块走一遍;
2. 重点理解 **声明式配置**:Service 只声明属性,CRUD 由 `BaseService` + 6 个 Trait 完成;
3. 掌握后动手:可直接使用 [第 10 章 代码生成器](/zh/generator/overview.html) 一键生成同等结构的模块。