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

#### 選擇表
選擇需要生成代碼的表,例如`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/`。