# 模板配置

Bee生成代码分为数据解析、加载模板、生成文件三个部分。我们可以根据bee的数据解析schema,定义各种组件模板。目前官方模板配置存放于https://github.com/beego/beego-pro。如果你觉得官方模板不方便使用,你可以将官方模板fork到你的仓库,然后更改该模板。将beegopro.toml里的gitRemotePath里填入你{fork github git}地址。

# 项目结构

├── ant4
│   ├── bee.toml
│   └── tmpl
│       ├── bee_default_controller.go.tmpl
│       ├── bee_default_model.go.tmpl
│       ├── controller.go.tmpl
│       ├── create.tsx.tmpl
│       ├── down.sql.tmpl
│       ├── formconfig.tsx.tmpl
│       ├── info.tsx.tmpl
│       ├── list.tsx.tmpl
│       ├── model.go.tmpl
│       ├── router.go.tmpl
│       ├── update.tsx.tmpl
│       └── up.sql.tmpl
├── default
│   ├── bee.toml
│   └── tmpl
│       ├── bee_default_controller.go.tmpl
│       ├── bee_default_model.go.tmpl
│       ├── controller.go.tmpl
│       ├── down.sql.tmpl
│       ├── model.go.tmpl
│       ├── router.go.tmpl
│       └── up.sql.tmpl
├── LICENSE
└── README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 类型

类型是用户配置beegopro.toml里proType类型的值。在这里对应了beego-pro里的项目名称。用户可以填不同的proType,选择官方的不同类型的模板。

# 模板描述文件

每个目录里有个bee.toml,用于描述模板的目录、模块、生成目录、执行钩子等,如下所示

renderPath = "tmpl"
[[descriptor]]
    module = "controllers"
    srcName = "bee_default_controller.go.tmpl"
    dstPath = "{{pathBeego}}/controllers/bee_default_controller.go"
    once = true
[[descriptor]]
    module = "controllers"
    srcName = "controller.go.tmpl"
    dstPath = "{{pathBeego}}/controllers/{{modelName}}.go"
[[descriptor]]
    module = "models"
    srcName = "bee_default_model.go.tmpl"
    dstPath = "{{pathBeego}}/models/bee_default_model.go"
    once = true
[[descriptor]]
    module = "models"
    srcName = "model.go.tmpl"
    dstPath = "{{pathBeego}}/models/{{modelName}}.go"
[[descriptor]]
    module = "routers"
    srcName = "router.go.tmpl"
    dstPath = "{{pathBeego}}/routers/{{modelName}}.go"
[[descriptor]]
    module = "antList"
    srcName = "list.tsx.tmpl"
    dstPath = "{{pathAnt}}/{{modelName}}/list.tsx"
[[descriptor]]
    module = "antForm"
    srcName = "formconfig.tsx.tmpl"
    dstPath = "{{pathAnt}}/{{modelName}}/formconfig.tsx"
[[descriptor]]
    module = "antCreate"
    srcName = "create.tsx.tmpl"
    dstPath = "{{pathAnt}}/{{modelName}}/create.tsx"
[[descriptor]]
    module = "antUpdate"
    srcName = "update.tsx.tmpl"
    dstPath = "{{pathAnt}}/{{modelName}}/update.tsx"
[[descriptor]]
    module = "antInfo"
    srcName = "info.tsx.tmpl"
    dstPath = "{{pathAnt}}/{{modelName}}/info.tsx"
[[descriptor]]
    module = "antUp"
    srcName = "up.sql.tmpl"
    dstPath = "{{pathBeego}}/sql/{{modelName}}_up.sql"
    script = "bee pro migration --sql={{pathBeego}}/sql/{{modelName}}_up.sql"
[[descriptor]]
    module = "antDown"
    srcName = "down.sql.tmpl"
    dstPath = "{{pathBeego}}/sql/{{modelName}}_down.sql"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  • renderPath 渲染的模板目录
  • descriptor 描述文件
    • module 模块名
    • srcName 模板文件名
    • dstPath 生成文集路径
    • once 是否只执行一次
    • script 执行钩子

# 模板语法参考pongo2

# 模板变量

  • path{PathName} PathName生成路径,例如pathBeego代表beego的目录路径
  • packageName 包名
  • packageImports 引入包名
  • packagePath 当前模板包路径
  • packageMod 项目包路径
  • modelName 模型名称
  • modelSchemas 模型数组结构体
  • modelPrimaryKey 模型主键
  • apiPrefix api前缀
  • generateTime 生成时间

# ModelSchemas

  • Name 名称
  • Comment 中文名称
  • GoType 数据类型
  • InputType
  • MysqlType
  • ColumnKey
  • OrmTag
  • Extend

# 方法

  • lowerFirst 首字母小写
  • upperFirst 首字母大写
  • snakeString 蛇形
  • camelString 驼峰

# 自己模板示例

掌握上述数据结构,就可以定义自己的模板了。更期待你给官方提pr,添加新的模板https://github.com/beego/beego-pro

# 定义结构体

type {{modelName|upperFirst}} struct {
     {% for value in modelSchemas %}{{value.Name|camelString}} {{value.GoType}} ` {% if value.OrmTag != "" %}orm:"{{value.OrmTag}}"{% endif %}json:"{{value.Name|camelString|lowerFirst}}" form:"{{value.Name|camelString|lowerFirst}}"` // {{value.Comment}}
     {% endfor %}
}
1
2
3
4

# 定义router

beego.Router("{{apiPrefix}}/{{modelName}}", &controllers.{{modelName|upperFirst}}Controller{}, "get:GetAll")

1
2