# 10.5 代码生成引擎 :::tip 概述 代码生成引擎基于模板文件,将表结构信息渲染为实际代码文件。渲染使用 PHP 原生 `include` + `extract` 机制,模板变量由 `GeneratorService::buildTemplateVars()` 统一构建。 ::: ## 生成文件清单 ### 后端文件 | 文件 | 模板 | 说明 | |------|------|------| | `app/controller/{Name}Controller.php` | controller.php.tpl | 控制器,含分页/列表/详情/增删改/批量删除/导入/导出 | | `app/logic/{Name}Logic.php` | logic.php.tpl | 业务逻辑,含属性配置、serializeMaps、导入导出方法 | | `app/model/{Name}.php` | model.php.tpl | 数据模型,含软删除、审计字段自动填充;树形结构额外生成 `children()` 自关联 | | `app/validate/{Name}Validate.php` | validate.php.tpl | 验证器,按字段分析自动生成验证规则(camelCase 字段名、require 规则、add/update 场景) | ### 前端文件(ui/ 普通列表模板 — 6 个文件) | 文件 | 模板 | 说明 | |------|------|------| | `ui/src/api/{app}/{name}.ts` | api.ts.tpl | API 接口模块(page/list/detail/add/update/delete/import/export) | | `ui/src/views/{app}/{name}/index.vue` | index.vue.tpl | 列表页(含搜索、表格、新增/编辑/详情弹窗、导入导出按钮) | | `ui/src/views/{app}/{name}/edit.vue` | edit.vue.tpl | 编辑弹窗(新增/复用) | | `ui/src/views/{app}/{name}/detail.vue` | detail.vue.tpl | 详情弹窗 | | `ui/src/views/{app}/{name}/columns.ts` | columns.ts.tpl | 表格列配置(含图片 Avatar、选项 Tag、链接等渲染) | | `ui/src/views/{app}/{name}/querySchemas.ts` | querySchemas.ts.tpl | 查询表单配置(按字段类型自动选 Input/Select/InputNumber/DatePicker) | ### 前端文件(ui2/ 树形模板 — 4 个文件) | 文件 | 模板 | 说明 | |------|------|------| | `ui/src/api/{app}/{name}.ts` | api.ts.tpl | API 接口模块 | | `ui/src/views/{app}/{name}/index.vue` | index.vue.tpl | 树形列表页(Tree + Table 左右布局) | | `ui/src/views/{app}/{name}/edit.vue` | edit.vue.tpl | 编辑弹窗(含上级节点选择) | | `ui/src/views/{app}/{name}/detail.vue` | detail.vue.tpl | 详情弹窗 | :::info 模板选择 表结构中包含 `parent_id` 或 `pid` 字段时自动使用 `ui2/` 树形模板,否则使用 `ui/` 普通列表模板。树形模板不生成 `columns.ts` 和 `querySchemas.ts`。 ::: ## GeneratorService 核心方法 ```php // app/service/GeneratorService.php /** * 获取可生成的表列表 * * 读取当前数据库所有表,返回表名、注释、引擎、行数等信息。 * 支持 MySQL / PostgreSQL / SQL Server / Oracle / SQLite。 */ public function page(array $params): array { ... } /** * 构建模板变量 * * 解析表结构 → 字段分析 → 构建全部模板变量。 * 是生成引擎的核心,决定模板中可用的所有变量。 */ public function buildTemplateVars(string $tableName, string $moduleComment, string $templateType): array { ... } /** * 渲染模板 * * 使用 PHP extract + include 机制渲染 .tpl 文件。 * 渲染前预检:禁止短标签 ` 输出变量,不能使用短标签 `` - 文件编码必须为 UTF-8 无 BOM - 控制结构(foreach/if)使用完整的 `` 标签 ::: ## 生成后自动操作 代码生成后,引擎会自动执行以下操作: | 操作 | 说明 | 幂等性 | |------|------|--------| | 写入文件 | 生成 Controller / Logic / Model / Validate / API / Vue 文件 | 文件已存在则跳过 | | 创建菜单 | 在指定父菜单下创建主菜单和权限节点 | 路径已存在则跳过 | | 创建字典 | 为带选项的字段自动创建字典和字典项 | 字典编码已存在则跳过 | | 注册路由 | 在 route/app.php 中插入 CRUD 路由组 | 路由组已存在则跳过 | ## 相关文档 - [10.4 表结构解析引擎](/zh/generator/parser.html) - [10.6 自定义模板开发](/zh/generator/templates.html) - [10.7 配置文件详解](/zh/generator/config.html)