# 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)