5.7 KiB
5.7 KiB
10.7 配置文件详解
:::tip 概述
代码生成器通过 .env 与 config/generator.php 配置菜单挂载、应用名、模板与输出路径;Web 界面配置单次生成的参数。
:::
.env 配置
# 代码生成器配置
# 父菜单ID(生成的菜单挂在此菜单下)
# 在菜单管理中查看目标父菜单的 ID
GENERATOR_PARENT_MENU_ID=189
# 应用名(路由前缀、前端目录)
# 影响生成的菜单路径和前端目录
# 如:tool → 路由 /tool/xxx,前端 ui/src/api/tool/
GENERATOR_APP_NAME=tool
config/generator.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)时,代码生成器会:
-
自动生成
$serializeMaps映射// 示例:字段 status 有选项(1=在用, 2=停用) protected array $serializeMaps = [ 'status' => 'example_status', // 字典编码 = {模块名}_{字段名} ]; -
自动创建字典数据
在
laravel_dict和laravel_dict_item表中自动创建对应记录:表 字段 值 laravel_dict name 案例-状态 laravel_dict code example_status laravel_dict_item name / value 在用 / 1,停用 / 2 -
查询时自动翻译
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/ 模板 |