)
GoFrame虽然有一些模板代码生成工具但对于基本的CRUD还是显得比较麻烦所以我们改造yii2的gii用它来生成样板代码。在yii2中gii的代码在 vendor/yiisoft/yii2-gii/src下views/default/index.php 中可以修改主页面上部的提示信息。views/default/view/files.php 决定了预览时需要生成的文件和路径的显示我们会修改它以便展示实际需要的golang文件的路径唯一需要真正生成的文件是yii2 Model文件因为我们会借用它的属性标签名从数据库表注释生成或手动修改来改成中文来得到接口定义中的中文描述。generators目录下的每个子目录对应了一种生成器每个子目录里都有Generator.php生成类主页面中以及对应生成器页面上部的文字描述其实是 Generator类中的getDescription()方法的返回值。我们会改动Generator类的generate()方法$files确定来最终生成的是哪些文件每个文件是一个CodeFile实例参数包括目标路径和实际渲染的模板其中目标路径会和views/default/view/files.php实际视图显示相关。用来渲染的模板放在 default 子目录下我们只需要使用generators/model/default名称Model/Logic Generator和generators/crud/default名称CRUD Generator。前者目录下增加模板文件iomodel.php 代表IO数据模型和logic.php 代表业务逻辑另外增加一个 user-only.php 用户表涉及注册、登录、验证等比较复杂不使用 iomodel.php和logic.php而是把所有可能需要的多个文件生成在一个文件中主要是IO数据模型和logic业务逻辑。后者目录下的controller.php 实际生成的是 API接口文件views/_form.php 实际生成 delete 动作文件views/create.php|index.php|update.php|view.php 则是对应动作文件增加views/api.http.php 作为API RESTful 请求测试文件另外同样增加一个 user-only.php 用来单独处理用户表一个文件内包含了众多内容主要是自定义数据验证规则、user|account两套API接口、user|account两套API接口测试、Auth中间件、user|account两套控制器动作。使用 gii 来生成样板代码是有一些约定的例如 id 表示自增字段使用 int64时间戳字段用 created_at 和 updated_at类型datetime对应 gtime.Time用户表字段用 username和passwordauthor_id 格式即 xxx_id表示这是一个外键即对应另一表的对象此外键不一定对应数据库外键对 username 会生成唯一性自定义验证规则对 author_id 生成外部对象必须存在自定义验证规则。对于需要根据实际手动调整的部分标记上 todo部分为方便参考官网就直接注释中标注url。用 tbl_post 描述大致工作流程。首先确保数据表已经存在gf gen dao 已经生成有关文件。gf run main.go 已经运行。确保PHP本地Web服务器已经运行gii可以工作。在 Model/Logic Generator 中选择表 tbl_post自动产生模型名 Post点 Preview 看看生成情况点 Generate在 yii2项目下生成 models/Post.php打开这个文件在attributeLabels() 方法中键 chnName 对应值改成“博客”其余各键字段值改成所需的中文名称如果数据库本身支持注释可能不需要改。再次在 Model/Logic Generator 中点击 Preview点开IO数据模型文件把内容复制到internal/model/post.go文件需要新建去掉头部不需要的部分。点开业务逻辑文件把内容复制到internal/logic/post/post.go文件需要新建去掉头部不需要的部分。在 CRUD Generator中Model Class部分输入 app\models\Post自动生成Controller Class点 Preview生成可预览的各文件点开API接口把内容前后两部分分别复制到 internal/logic/custom_validators/post_author_exist.go 存在外键故需额外新建自定义验证规则文件 和 api/post/v1/post.go 需新建此API接口定义文件且PROJECT_NAME_XXX需要改成你的项目根目录名并且去掉头部不需要的部分另外规则中模型名根据 author_id 字段生成了 Author但实际应该是 User需要手动调整此类问题。点开API接口测试文件把内容复制到 api/post/v1/post-crud.http去掉头部不需要的部分。在继续之前请确保gf gen ctrl 和 gf gen service也就是根据API接口生成控制器动作和根据业务逻辑生成服务接口。接下来就是分别点开控制器动作-删除、控制器动作-新建、控制器动作-列表、控制器动作-更新、控制器动作-详情把方法函数体部分复制到 internal/controller/post/post_v1_delete|create|index|update|view.go对应方法内头部 import 部分需要去除不再被引用的部分。在 internal/cmd/cmd.go 添加 post.NewV1(),注册控制器初始开发没必要放到需要验证可以后期调整。观察gf run main.go控制台输出确保已经没有错误。调整API接口测试文件api/post/v1/post-crud.http 中有关 JSON参数和 URL中 id 部分大致按以下步骤测试 列表、带过滤条件的列表、创建-查看-外部对象不存在的创建、更新-查看-外部对象不存在的更新、查看-删除-查看。