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

5.7 KiB
Raw Blame History

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)时,代码生成器会:

  1. 自动生成 $serializeMaps 映射

    // 示例:字段 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/ 模板

相关文档