[TOC]
> 代码自动生成功能的url为`/admin/generate/index`,可以一键生成控制器,模型,验证器,视图。自动建表功能已经删除,建议使用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/d0/63/d06340f4e4e3375af8f87f9393f34fb3_3358x1480.png)
#### 选择表
选择需要生成代码的表,例如`user`表,选择之后界面如下:
![](https://img.kancloud.cn/ee/9c/ee9c43ef41cd619dbda5c7dd47c6580f_3332x1614.png)
#### 自动生成设置
* **中文名**为菜单,控制器,模型,验证器的中文名称,此名称默认取表名的注释。
* **自动生成类名**主要为控制器,模型,验证器的类名,默认为表名转大写驼峰。
* **列表删除**为`index`视图中的删除功能,不需要取消勾选即可,默认选中。
* **列表添加**为`index`视图中的添加功能,不需要取消勾选即可,默认选中。
* **列表刷新**为`index`视图中的刷新功能,不需要取消勾选即可,默认选中。
* **列表导出**为`index`视图中的导出功能,不需要取消勾选即可,默认选中。
* **列表启用/禁用**为`index`视图中的启用/禁用功能,不需要取消勾选即可,默认未勾选。
---
* **菜 单**可选生成或不生成,生成的情况下可以选择具体生成哪些菜单。
* **控制器**可选生成或不生成,控制器名可进行自定义,控制器方法可选择需要的。
* **模 型**可选生成或不生成,模型名可进行自定义,自动时间戳默认选中,软删除功能默认选中。
* **验证器**可选生成或不生成,模型名可进行自定义。
---
* **字段设置**
字段设置为代码自动生成核心功能,支持设置以下内容:
| 功能/设置 | 介绍 |
| --- | --- |
| 字段名 | 表中的字段名,自动读取。 |
| 字段类型 | 表中字段类型,自动读取。 |
| 是否列表字段 | 是否在列表视图显示。 |
| 是否搜索字段 | 是否在列表页keywords关键词搜索,一般name,title之类的字段可以选择。 |
| 是否表单字段 | 是否在表单页面(添加和修改)显示 。 |
| 表单类型 | 在表单页的输入类型,例如text,file,textarea等等。 |
| 表单验证 | 表单字段的验证类型,例如非空,长度限制等等。目前只实现了非空自动生成,其他验证过暂时可以自行手动添加。 |
| 更多设置 | 更多设置介绍 |
| --- | --- |
| 默认值: | 表单内的默认值。 |
| 获取/修改器 | 例如int类型的日期时间字段,可以选择datetime。is_hot(是否热门)之类的可以选择switch。 |
| 列表排序 | 是否参与列表页的排序,例如注册时间,账户余额之类的可以勾选。 |
| 验证场景 | 表单字段需要验证的场景,目前有后台的增改,api模块的增改,index模块的更改。 |
| 关联设置 | 有三个选项,非关联字段,关联外键,关联主键。**下面几行单独讲关联外键和关联主键的含义和用法。** |
| 关联外键(关联设置) | 例如文章表的`user_id`(发布人)字段就为关联外键,关联着用户表(user),对应的模型调用方法为`belongsTo`。 关联外键当需要显示的时候,例如文章列表页显示发布人昵称,**关联显示字段**填写`nickname`即可。 |
| 关联主键(关联设置) | 关联主键一般为`id`,例如用户表(user)的`id`字段关联着文章表,评论表,订单表等等。对应模型调用的方法有`hasOne`,`hasMany`等。 像用户表可能存在多个关联表,例如文章表(article),订单表(order),关联表模型应该填写所有关联的表,并用英文逗号分割,例如`article,order` |
#### 代码生成
设置完菜单,视图,模型,控制器,验证器,字段等信息后,点击右下角的提交按钮即可生成对应的代码文件。生成的代码文件如下:
- 控制器,所在目录`/application/admin/controller/`。
- 视图,所在目录`/application/admin/view/`。
- 模型,所在目录`/application/common/model/`。
- 验证器,所在目录`/application/common/validate/`。