Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_NaiveVue/zh/generator/config.md
T
2026-10-08 17:50:29 +08:00

142 lines
5.7 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.
# 10.7 配置文件详解
:::tip 概述
代码生成器通过 `.env` 与 `config/generator.php` 配置菜单挂载、应用名、模板与输出路径;Web 界面配置单次生成的参数。
:::
## .env 配置
```ini
# 代码生成器配置
# 父菜单ID(生成的菜单挂在此菜单下)
# 在菜单管理中查看目标父菜单的 ID
GENERATOR_PARENT_MENU_ID=189
# 应用名(路由前缀、前端目录)
# 影响生成的菜单路径和前端目录
# 如:tool → 路由 /tool/xxx,前端 ui/src/api/tool/
GENERATOR_APP_NAME=tool
```
## config/generator.php(来自项目实际代码)
```php
return [
// 主菜单父ID(生成的菜单挂在该父菜单下)
// 读取方:GeneratorService::getParentMenuId()
'parent_menu_id' => (int) env('GENERATOR_PARENT_MENU_ID', 189),
// 应用名(路由前缀、前端目录)
// 影响范围:路由 path(/{appName}/{module})、前端目录(ui/src/api|views/{appName})
'app_name' => env('GENERATOR_APP_NAME', 'tool'),
// 模板目录(相对于项目根目录)
'template_dir' => 'resources/templates',
// 后端输出目录:模板文件 => 目标路径({ClassName} 会被替换为模型类名)
'backend_outputs' => [
'model.php.tpl' => 'app/Models/{ClassName}.php',
'service.php.tpl' => 'app/Services/{ClassName}Service.php',
'controller.php.tpl' => 'app/Http/Controllers/Api/{ClassName}Controller.php',
'request.php.tpl' => 'app/Http/Requests/{ClassName}Request.php',
],
];
```
:::tip 前端输出路径
前端输出路径(`ui/src/api|views/{app_name}/{module}`)在 `GeneratorLogic` 中按 `app_name` 与模块名拼接,不在 `backend_outputs` 配置中。
:::
## Web 界面配置
通过「开发工具 → 代码生成」页面配置:
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 表名 | 选择要生成的表 | - |
| 模块名 | 生成的模块名(影响路由前缀和前端目录) | 表名去掉前缀 |
| 功能名 | 功能中文名称(用于注释和菜单标题) | 表注释 |
| 作者 | 代码注释中的作者 | admin |
| 是否导入导出 | 是否生成 import/export 方法 | 是 |
| 树形结构 | 是否使用树形模板(需有 parent_id 字段) | 否 |
| 上级菜单 | 生成菜单挂载到的父菜单 | 由 `GENERATOR_PARENT_MENU_ID` 决定 |
## 生成的文件路径
| 文件 | 路径 | 说明 |
|------|------|------|
| Model | `app/Models/{Name}.php` | 数据模型 |
| FormRequest | `app/Http/Requests/{Name}Request.php` | 参数验证 |
| Service | `app/Services/{Name}Service.php` | 业务服务 |
| Controller | `app/Http/Controllers/Api/{Name}Controller.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/ 模板) |
## 自动生成的 Service 属性
代码生成器会根据表结构自动分析并生成以下属性:
| 属性 | 生成条件 | 说明 |
|------|----------|------|
| `$fileFields` | 字段名含 image/avatar/photo/pic 等且类型为 varchar | 文件/图片字段,需 `use HasFileProcessing` |
| `$fileSaveDir` | 有 `$fileFields` 时生成 | 文件上传子目录 |
| `$contentFields` | 字段名含 content/body/description 且类型为 text | 富文本字段,`[IMG_URL]` 占位处理 |
| `$pageLikeFields` | 字段名含 name/title/keyword 且类型为 varchar | 模糊搜索字段 |
| `$pageEqFields` | 字段名含 status/type/group 且类型为 int | 精确匹配字段 |
| `$uniqueFields` | 字段有 UNIQUE 索引 | 唯一性校验字段 |
| `$serializeMaps` | 字段有选项(choices)时自动生成 | 枚举显示名映射 |
| `$treeParentField` | 表含 parent_id 或 pid 字段 | 树形结构父级字段 |
| `$treeLikeField` | 树形结构时生成 | 树形查询模糊搜索字段 |
## serializeMaps 与字典自动创建
当字段被分析出有选项(choices)时,代码生成器会:
1. **自动生成 `$serializeMaps` 映射**
```php
// 示例:字段 status 有选项(1=在用, 2=停用)
protected array $serializeMaps = [
'status' => 'example_status', // 字典编码 = {模块名}_{字段名}
];
```
2. **自动创建字典数据**
在 `laravel_dict` 和 `laravel_dict_item` 表中自动创建对应记录:
| 表 | 字段 | 值 |
|----|------|------|
| laravel_dict | name | 案例-状态 |
| laravel_dict | code | example_status |
| laravel_dict_item | name / value | 在用 / 1,停用 / 2 |
3. **查询时自动翻译**
`HasSerializeMaps` 在查询结果中自动补 `statusText` 字段,值为字典翻译后的文本。
:::info 幂等性
字典创建是幂等的:如果 `laravel_dict` 中已存在相同 `code` 的记录,会自动跳过,不会重复创建。
:::
## 配置影响总结
| 配置项 | 影响范围 |
|--------|----------|
| `GENERATOR_PARENT_MENU_ID` | 生成的菜单挂载位置 |
| `GENERATOR_APP_NAME` | 菜单路径、前端目录、API 路径、路由前缀 |
| `config/generator.php → backend_outputs` | 后端文件的输出路径映射 |
| `config/generator.php → template_dir` | 模板目录位置 |
| 是否导入导出 | Controller/Service 中是否生成 import/export 方法 |
| 树形结构 | 使用 ui/ 还是 ui2/ 模板 |
## 相关文档
- [10.5 代码生成引擎](/zh/generator/code-engine.html)
- [10.6 自定义模板开发](/zh/generator/templates.html)
- [10.8 实战案例](/zh/generator/demo.html)