# 使用 Gii 生成代碼
本章將介紹如何使用?[Gii](http://www.yiichina.com/doc/guide/2.0/tool-gii)?去自動生成 Web 站點常用功能的代碼。使用 Gii 生成代碼非常簡單,只要按照 Gii 頁面上的介紹輸入正確的信息即可。
貫穿本章節,你將會學到:
* 在你的應用中開啟 Gii
* 使用 Gii 去生成活動記錄類
* 使用 Gii 去生成數據表操作的增查改刪(CRUD)代碼
* 自定義 Gii 生成的代碼
## 開始 Gii
[Gii](http://www.yiichina.com/doc/guide/2.0/tool-gii)?是 Yii 中的一個[模塊](http://www.yiichina.com/doc/guide/2.0/structure-modules)。可以通過配置應用的 yii\base\Application::modules 屬性開啟它。通常來講在?`config/web.php`?文件中會有以下配置代碼:
~~~
$config = [ ... ];
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = 'yii\gii\Module';
}
~~~
這段配置表明,如果當前是[開發環境](http://www.yiichina.com/doc/guide/2.0/concept-configurations#environment-constants),應用會包含?`gii`?模塊,模塊類是 yii\gii\Module。
如果你檢查應用的[入口腳本](http://www.yiichina.com/doc/guide/2.0/structure-entry-scripts)?`web/index.php`,將看到這行代碼將?`YII_ENV_DEV`?設為 true:
~~~
defined('YII_ENV') or define('YII_ENV', 'dev');
~~~
鑒于這行代碼的定義,應用處于開發模式下,按照上面的配置會打開 Gii 模塊。你可以直接通過 URL 訪問 Gii:
~~~
http://hostname/index.php?r=gii
~~~
> 補充: 如果你通過本機以外的機器訪問 Gii,請求會被出于安全原因拒絕。你可以配置 Gii 為其添加允許訪問的 IP 地址:
>
> ~~~
> 'gii' => [
> 'class' => 'yii\gii\Module',
> 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] // 按需調整這里
> ],
> ~~~

## 生成活動記錄類
選擇 “Model Generator” (點擊 Gii 首頁的鏈接)去生成活動記錄類。并像這樣填寫表單:
* Table Name:?`country`
* Model Class:?`Country`

然后點擊 “Preview” 按鈕。你會看到?`models/Country.php`?被列在將要生成的文件列表中。可以點擊文件名預覽內容。
如果你已經創建過同樣的文件,使用 Gii 會覆寫它,點擊文件名旁邊的?`diff`?能查看現有文件與將要生成的文件的內容區別。

想要覆寫已存在文件,選中 “overwrite” 下的復選框然后點擊 “Generator”。如果是新文件,只點擊 “Generator” 就好。
接下來你會看到一個包含已生成文件的說明頁面。如果生成過程中覆寫過文件,還會有一條信息說明代碼是重新生成覆蓋的。
## 生成 CRUD 代碼
CRUD 代表增,查,改,刪操作,這是絕大多數 Web 站點常用的數據處理方式。選擇 Gii 中的 “CRUD Generator” (點擊 Gii 首頁的鏈接)去創建 CRUD 功能。本例 “country” 中需要這樣填寫表單:
* Model Class:?`app\models\Country`
* Search Model Class:?`app\models\CountrySearch`
* Controller Class:?`app\controllers\CountryController`

然后點擊 “Preview” 按鈕。你會看到下述將要生成的文件列表。
[[NEED THE IMAGE HERE / 等待官方補充圖片]]
如果你之前創建過?`controllers/CountryController.php`?和?`views/country/index.php`?文件(在指南的使用數據庫章節),選中 “overwrite” 下的復選框覆寫它們(之前的文件沒能全部支持 CRUD)。
## 試運行
用瀏覽器訪問下面的 URL 查看生成代碼的運行:
~~~
http://hostname/index.php?r=country/index
~~~
可以看到一個柵格顯示著從數據表中讀取的國家數據。支持在列頭對數據進行排序,輸入篩選條件進行篩選。
可以瀏覽詳情,編輯,或刪除柵格中的每個國家。還可以點擊柵格上方的 “Create Country” 按鈕通過表單創建新國家。


下面列出由 Gii 生成的文件,以便你研習功能和實現,或修改它們。
* 控制器:`controllers/CountryController.php`
* 模型:`models/Country.php`?和?`models/CountrySearch.php`
* 視圖:`views/country/*.php`
> 補充:Gii 被設計成高度可定制和可擴展的代碼生成工具。使用它可以大幅提高應用開發速度。請參考?[Gii](http://www.yiichina.com/doc/guide/2.0/tool-gii)?章節了解更多內容。
## 總結
本章學習了如何使用 Gii 去生成為數據表中數據實現完整 CRUD 功能的代碼。
- 介紹(Introduction)
- 關于 Yii(About Yii)
- 從 Yii 1.1 升級(Upgrading from Version 1.1)
- 入門(Getting Started)
- 安裝 Yii(Installing Yii)
- 運行應用(Running Applications)
- 第一次問候(Saying Hello)
- 使用 Forms(Working with Forms)
- 玩轉 Databases(Working with Databases)
- 用 Gii 生成代碼(Generating Code with Gii)
- 更上一層樓(Looking Ahead)
- 應用結構(Application Structure)
- 結構概述(Overview)
- 入口腳本(Entry Scripts)
- 應用(Applications)
- 應用組件(Application Components)
- 控制器(Controllers)
- 模型(Models)
- 視圖(Views)
- 模塊(Modules)
- 過濾器(Filters)
- 小部件(Widgets)
- 前端資源(Assets)
- 擴展(Extensions)
- 請求處理(Handling Requests)
- 運行概述(Overview)
- 引導(Bootstrapping)
- 路由引導與創建 URL(Routing and URL Creation)
- 請求(Requests)
- 響應(Responses)
- Sessions and Cookies
- 錯誤處理(Handling Errors)
- 日志(Logging)
- 關鍵概念(Key Concepts)
- 組件(Components)
- 屬性(Properties)
- 事件(Events)
- 行為(Behaviors)
- 配置(Configurations)
- 別名(Aliases)
- 類自動加載(Class Autoloading)
- 服務定位器(Service Locator)
- 依賴注入容器(Dependency Injection Container)
- 配合數據庫工作(Working with Databases)
- 數據庫訪問(Data Access Objects): 數據庫連接、基本查詢、事務和模式操作
- 查詢生成器(Query Builder): 使用簡單抽象層查詢數據庫
- 活動記錄(Active Record): 活動記錄對象關系映射(ORM),檢索和操作記錄、定義關聯關系
- 數據庫遷移(Migrations): 在團體開發中對你的數據庫使用版本控制
- Sphinx
- Redis
- MongoDB
- ElasticSearch
- 接收用戶數據(Getting Data from Users)
- 創建表單(Creating Forms)
- 輸入驗證(Validating Input)
- 文件上傳(Uploading Files)
- 收集列表輸入(Collecting Tabular Input)
- 多模型同時輸入(Getting Data for Multiple Models)
- 顯示數據(Displaying Data)
- 格式化輸出數據(Data Formatting)
- 分頁(Pagination)
- 排序(Sorting)
- 數據提供器(Data Providers)
- 數據小部件(Data Widgets)
- 操作客戶端腳本(Working with Client Scripts)
- 主題(Theming)
- 安全(Security)
- 認證(Authentication)
- 授權(Authorization)
- 處理密碼(Working with Passwords)
- 客戶端認證(Auth Clients)
- 安全領域的最佳實踐(Best Practices)
- 緩存(Caching)
- 概述(Overview)
- 數據緩存(Data Caching)
- 片段緩存(Fragment Caching)
- 分頁緩存(Page Caching)
- HTTP 緩存(HTTP Caching)
- RESTful Web 服務
- 快速入門(Quick Start)
- 資源(Resources)
- 控制器(Controllers)
- 路由(Routing)
- 格式化響應(Response Formatting)
- 授權驗證(Authentication)
- 速率限制(Rate Limiting)
- 版本化(Versioning)
- 錯誤處理(Error Handling)
- 開發工具(Development Tools)
- 調試工具欄和調試器(Debug Toolbar and Debugger)
- 使用 Gii 生成代碼(Generating Code using Gii)
- TBD 生成 API 文檔(Generating API Documentation)
- 測試(Testing)
- 概述(Overview)
- 搭建測試環境(Testing environment setup)
- 單元測試(Unit Tests)
- 功能測試(Functional Tests)
- 驗收測試(Acceptance Tests)
- 測試夾具(Fixtures)
- 高級專題(Special Topics)
- 高級應用模版(Advanced Project Template)
- 從頭構建自定義模版(Building Application from Scratch)
- 控制臺命令(Console Commands)
- 核心驗證器(Core Validators)
- 國際化(Internationalization)
- 收發郵件(Mailing)
- 性能優化(Performance Tuning)
- 共享主機環境(Shared Hosting Environment)
- 模板引擎(Template Engines)
- 集成第三方代碼(Working with Third-Party Code)
- 小部件(Widgets)
- Bootstrap 小部件(Bootstrap Widgets)
- jQuery UI 小部件(jQuery UI Widgets)
- 助手類(Helpers)
- 助手一覽(Overview)
- Array 助手(ArrayHelper)
- Html 助手(Html)
- Url 助手(Url)