[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`,點擊第一個**代碼自動生成**進入到代碼自動生成生成頁面。
代碼自動生成界面如下:

#### 選擇表
選擇需要生成代碼的表,例如`user`表,選擇之后界面如下:

#### 自動生成設置
* **中文名**為菜單,控制器,模型,驗證器的中文名稱,此名稱默認取表名的注釋。
* **自動生成類名**主要為控制器,模型,驗證器的類名,默認為表名轉大寫駝峰。
* **列表刪除**為`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/`。