Files
2026-09-29 09:49:04 +08:00

113 lines
4.6 KiB
Markdown
Raw Permalink 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.
# 10.7 配置文件详解
:::tip 概述
代码生成器通过 `.env` 和 Web 界面配置,主要控制生成行为和默认值。
:::
## .env 配置
```ini
; 代码生成器配置
[GENERATOR]
; 父菜单ID(生成的菜单挂在此菜单下)
; 在菜单管理中查看目标父菜单的 ID
PARENT_MENU_ID = 189
; 应用名(路由前缀)
; 影响生成的菜单路径和前端目录
; 如:tool → /tool/xxx,system → /system/xxx
APP_NAME = tool
```
## Web 界面配置
通过「工具管理 → 代码生成」页面配置:
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 表名 | 选择要生成的表 | - |
| 模块名 | 生成的模块名(影响路由前缀和前端目录) | 表名去掉前缀 |
| 功能名 | 功能中文名称(用于注释和菜单标题) | 表注释 |
| 作者 | 代码注释中的作者 | admin |
| 包名 | 生成文件的命名空间 | app |
| 是否导入导出 | 是否生成 import/export 方法 | 是 |
| 树形结构 | 是否使用树形模板(需有 parent_id 字段) | 否 |
| 上级菜单 | 生成菜单挂载到的父菜单 | 由 PARENT_MENU_ID 决定 |
## 生成的文件路径
| 文件 | 路径 | 说明 |
|------|------|------|
| Controller | `app/controller/{Name}Controller.php` | 控制器 |
| Logic | `app/logic/{Name}Logic.php` | 业务逻辑 |
| Model | `app/model/{Name}.php` | 数据模型 |
| Validate | `app/validate/{Name}Validate.php` | 验证器 |
| API | `ui/src/api/{app}/{name}.ts` | 前端 API |
| 列表页 | `ui/src/views/{app}/{name}/index.vue` | 列表页 |
| 编辑弹窗 | `ui/src/views/{app}/{name}/edit.vue` | 编辑弹窗 |
| 详情弹窗 | `ui/src/views/{app}/{name}/detail.vue` | 详情弹窗 |
| 表格列配置 | `ui/src/views/{app}/{name}/columns.ts` | 表格列定义(仅 ui/ 模板) |
| 查询表单配置 | `ui/src/views/{app}/{name}/querySchemas.ts` | 搜索表单定义(仅 ui/ 模板) |
## 自动生成的 Logic 属性
代码生成器会根据表结构自动分析并生成以下 Logic 属性:
| 属性 | 生成条件 | 说明 |
|------|----------|------|
| `$fileFields` | 字段名含 image/avatar/photo/pic 等且类型为 varchar | 文件/图片字段,自动迁移临时文件并补全 URL |
| `$fileSaveDir` | 有 `$fileFields` 时生成 | 文件上传子目录 |
| `$contentFields` | 字段名含 content/body/description 且类型为 text | 富文本字段,自动处理临时文件和图片占位符 |
| `$pageLikeFields` | 字段名含 name/title/keyword 且类型为 varchar | 模糊搜索字段,分页查询时 LIKE 匹配 |
| `$pageEqFields` | 字段名含 status/type/group 且类型为 int | 精确匹配字段,分页查询时等值过滤 |
| `$uniqueFields` | 字段有 UNIQUE 索引 | 唯一性校验字段,新增/修改时自动校验 |
| `$serializeMaps` | 字段有选项(choices)时自动生成 | 枚举显示名映射,查询时自动补 `{字段名}Text` |
| `$treeParentField` | 表含 parent_id 或 pid 字段 | 树形结构父级字段 |
| `$treeLikeField` | 树形结构时生成 | 树形查询模糊搜索字段 |
## serializeMaps 与字典自动创建
当字段被分析出有选项(choices)时,代码生成器会:
1. **自动生成 `$serializeMaps` 映射**
```php
// 示例:字段 status 有选项(0=正常, 1=禁用)
protected array $serializeMaps = [
'status' => 'example_status', // 字典编码 = {模块名}_{字段名}
];
```
2. **自动创建字典数据**
在 `think_dict` 和 `think_dict_item` 表中自动创建对应记录:
| 表 | 字段 | 值 |
|----|------|------|
| think_dict | name | 案例-状态 |
| think_dict | code | example_status |
| think_dict_item | name / value | 正常 / 0,禁用 / 1 |
3. **查询时自动翻译**
`BaseLogic::processSerializeMaps()` 在查询结果中自动补 `statusText` 字段,值为字典翻译后的文本。
:::info 幂等性
字典创建是幂等的:如果 `think_dict` 中已存在相同 `code` 的记录,会自动跳过,不会重复创建。
:::
## 配置影响总结
| 配置项 | 影响范围 |
|--------|----------|
| `GENERATOR.PARENT_MENU_ID` | 生成的菜单挂载位置 |
| `GENERATOR.APP_NAME` | 菜单路径、前端目录、API 路径、路由前缀 |
| 是否导入导出 | Controller 中是否生成 import/export 方法,Logic 中是否生成对应方法 |
| 树形结构 | 使用 ui/ 还是 ui2/ 模板,Controller 中是否生成 page 方法 |
## 相关文档
- [10.5 代码生成引擎](/zh/generator/code-engine.html)
- [10.6 自定义模板开发](/zh/generator/templates.html)
- [10.8 实战案例](/zh/generator/demo.html)