[TOC]
代码自动生成功能的url为`/admin/generate/index`,可以一键生成后台控制器,后台视图,接口控制器,接口service,模型,验证器。自动建表功能已经删除,建议使用ThinkPHP的数据库迁移功能建表或自行在数据库中建表。
## 完整操作步骤
例如,生成一个后台 **用户管理** 功能
### 建表
#### 创建表迁移文件
运行以下命令,该命令会在`/database/migrations/`目录下生成对应的迁移文件。
```
php think migrate:create User
```
#### 添加表字段
迁移文件默认带一个`change`方法,在`change`方法中可以进行表字段的添加,示例代码如下。
~~~php
public function change()
{
$table = $this->table('user', ['comment' => '用户', 'engine' => 'InnoDB', 'encoding' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci']);
$table
->addColumn('avatar', 'string', ['limit' => 255, 'default' => '/static/index/images/avatar.png', 'comment' => '头像'])
->addColumn('username', 'string', ['limit' => 30, 'default' => '', 'comment' => '用户名'])
->addColumn('nickname', 'string', ['limit' => 30, 'default' => '', 'comment' => '昵称'])
->addColumn('mobile', 'string', ['limit' => 11, 'default' => '', 'comment' => '手机号'])
->addColumn('password', 'string', ['limit' => 255, 'default' => password_hash('_password', 1), 'comment' => '密码'])
->addColumn('status', 'boolean', ['limit' => 1, 'default' => 1, 'comment' => '是否启用'])
->addColumn('create_time', 'integer', ['limit' => 10, 'default' => 0, 'comment' => '创建时间'])
->addColumn('update_time', 'integer', ['limit' => 10, 'default' => 0, 'comment' => '更新时间'])
->addColumn('delete_time', 'integer', ['limit' => 10, 'default' => 0, 'comment' => '删除时间'])
->create();
$this->insertData();
}
~~~
在创建表的过程中应注意以下事项:
- 表名必须使用`小写+下划线`的形式,表备注必须为该表中文名称,例如`user`表的备注为`用户`,切勿添加后缀。
- 字段名必须使用`小写+下划线`的形式,字段注释应该为该字段的中文名称,例如`username`字段的注释为`用户名`,切勿添加后缀。
- 无特殊情况表的主键必须为`id`字段,且为无符号自增,可根据需要设置为`int`或`bigint`。
- 无特殊情况必须添加`create_time,update_time,delete_time`三个字段,默认值都为`0`,基础模型中软删除默认值已经设置为`0`,无须进行调整。
- 关联的外键必须要遵守`关联表`+`_id`的形式命名,例如文章表的`user_id`关联用户表(user),订单表的`goods_id`关联商品表(goods)。
#### 运行迁移命令生成表
创建表的代码写完之后,可以运行以下命令进行表的创建:
```
php think migrate:run
```
> 以上三步可以省略,直接运行`mysql`语句创建或在数据库工具中进行表的创建。
### 代码生成
当表创建好之后,就可以访问`/admin/generate/index`,点击第一个**代码自动生成**进入到代码自动生成生成页面。
代码自动生成界面如下:
![代码自动生成](https://img.kancloud.cn/9d/24/9d24566e8affbfeaa0548b0245a4acf7_3310x1444.png)
#### 选择表
选择需要生成代码的表,例如`user`表,选择之后界面如下:
#### 自动生成设置
* **中文名**为菜单,控制器,模型,验证器的中文名称,此名称默认取表名的注释。
* **模块名称后缀**默认为管理,比如生成菜单后主菜单(/admin/user/index)就叫用户管理。
* **模块图标**默认为列表样式,在左侧菜单图标中使用。
* **自动生成类名**主要为控制器,模型,验证器的类名,默认为表名转大写驼峰。
* **列表删除**为`index`视图中的删除功能,不需要取消勾选即可,默认选中。
* **列表添加**为`index`视图中的添加功能,不需要取消勾选即可,默认选中。
* **列表刷新**为`index`视图中的刷新功能,不需要取消勾选即可,默认选中。
* **列表导出**为`index`视图中的导出功能,不需要取消勾选即可,默认选中。
* **列表导入**为`index`视图中的导入功能,不需要取消勾选即可,默认选中。
* **列表启用/禁用**为`index`视图中的启用/禁用功能,不需要取消勾选即可,默认未勾选。
---
* **菜 单**可选生成或不生成,生成的情况下可以选择具体生成哪些菜单。
* **Admin控制器**可选生成或不生成,控制器名可进行自定义,控制器方法可选择需要的。
* * **Api控制器**可选生成或不生成,控制器名可进行自定义,控制器方法可选择需要的。
* **模 型**可选生成或不生成,模型名可进行自定义,自动时间戳默认选中,软删除功能默认选中。
* **验证器**可选生成或不生成,模型名可进行自定义。
---
* **字段设置**
字段设置为代码自动生成核心功能,支持设置以下内容:
| 功能/设置 | 介绍 |
| --- | --- |
| 字段 | 表中的字段名,自动读取。 |
| 类型 | 表中字段类型,自动读取。 |
| 名称 | 表中的字段中文名,自动读取字段注释。 |
| 默认值 | 表中的字段默认值,自动读取。 |
| 列表 | 是否在后台列表视图显示以及api列表返回。 |
| 排序 | 是否在后台列表中参与排序。 |
| 表单 | 在表单页的输入类型,默认非表单字段;可选择多种类型,例如text,file,textarea等等。 |
| 验证规则 | 表单字段的验证类型,例如非空,格式限制等等。目前只实现了非空和部分格式限制自动生成,其他验证过暂时可以自行手动添加。 |
| 验证场景 | 在哪些场景下进行验证,例如后台添加(admin_add)时等 。|
| 自定义验证规则 | 暂未开发,需要后续完善 |
| 验证场景 | 是否在列表页keywords关键词搜索,一般name,title之类的字段可以选择。 |
| 是否表单字段 | 是否在表单页面(添加和修改)显示 。 |
| 自定义列表 | 当字段表单场景为select(下拉选择)或multi_select(多选)同时为非关联字段时,必须完善自定义数据列表,例如性别,需要在内容区域填写 `0||未知\n1||男\n2||女` ,其中`\n`无需填写,回车换行即可 |
| 获取/修改器 | 例如int类型的日期时间字段,可以选择datetime。is_hot(是否热门)之类的可以选择switch。 |
| 关联外键(关联设置) | 例如文章表的`user_id`(发布人)字段就为关联外键,关联着用户表(user),对应的模型调用方法为`belongsTo`。 关联外键当需要显示的时候,例如文章列表页显示发布人昵称,**关联显示字段**填写`nickname`即可。 |
| 关联主键(关联设置) | 关联主键一般为`id`,例如用户表(user)的`id`字段关联着文章表,评论表,订单表等等。对应模型调用的方法有`hasOne`,`hasMany`等。 像用户表可能存在多个关联表,例如文章表(article),订单表(order),关联表模型应该填写所有关联的表,并用英文逗号分割,例如`article,order` |
#### 代码生成
设置完菜单,视图,模型,控制器,验证器,字段等信息后,点击右下角的提交按钮即可生成对应的代码文件。生成的代码文件如下:
- 控制器,所在目录`/app/admin/controller/`。
- 视图,所在目录`/app/admin/view/`。
- 模型,所在目录`/app/common/model/`。
- 验证器,所在目录`/app/common/validate/`。