?
Ce document utilise Manuel du site Web PHP chinois Libérer
本章將介紹如何使用?Gii?去自動生成 Web 站點常用功能的代碼。使用 Gii 生成代碼非常簡單,只要按照 Gii 頁面上的介紹輸入正確的信息即可。
貫穿本章節(jié),你將會學到:
Gii?是 Yii 中的一個模塊??梢酝ㄟ^配置應(yīng)用的 yii\base\Application::modules 屬性開啟它。通常來講在?config/web.php
?文件中會有以下配置代碼:
$config = [ ... ];
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = 'yii\gii\Module';
}
這段配置表明,如果當前是開發(fā)環(huán)境,應(yīng)用會包含?gii
?模塊,模塊類是 yii\gii\Module。
如果你檢查應(yīng)用的入口腳本?web/index.php
,將看到這行代碼將?YII_ENV_DEV
?設(shè)為 true:
defined('YII_ENV') or define('YII_ENV', 'dev');
鑒于這行代碼的定義,應(yīng)用處于開發(fā)模式下,按照上面的配置會打開 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'] // 按需調(diào)整這里 ],
選擇 “Model Generator” (點擊 Gii 首頁的鏈接)去生成活動記錄類。并像這樣填寫表單:
country
Country
然后點擊 “Preview” 按鈕。你會看到?models/Country.php
?被列在將要生成的文件列表中。可以點擊文件名預覽內(nèi)容。
如果你已經(jīng)創(chuàng)建過同樣的文件,使用 Gii 會覆寫它,點擊文件名旁邊的?diff
?能查看現(xiàn)有文件與將要生成的文件的內(nèi)容區(qū)別。
想要覆寫已存在文件,選中 “overwrite” 下的復選框然后點擊 “Generator”。如果是新文件,只點擊 “Generator” 就好。
接下來你會看到一個包含已生成文件的說明頁面。如果生成過程中覆寫過文件,還會有一條信息說明代碼是重新生成覆蓋的。
CRUD 代表增,查,改,刪操作,這是絕大多數(shù) Web 站點常用的數(shù)據(jù)處理方式。選擇 Gii 中的 “CRUD Generator” (點擊 Gii 首頁的鏈接)去創(chuàng)建 CRUD 功能。本例 “country” 中需要這樣填寫表單:
app\models\Country
app\models\CountrySearch
app\controllers\CountryController
然后點擊 “Preview” 按鈕。你會看到下述將要生成的文件列表。
[[NEED THE IMAGE HERE / 等待官方補充圖片]]
如果你之前創(chuàng)建過?controllers/CountryController.php
?和?views/country/index.php
?文件(在指南的使用數(shù)據(jù)庫章節(jié)),選中 “overwrite” 下的復選框覆寫它們(之前的文件沒能全部支持 CRUD)。
用瀏覽器訪問下面的 URL 查看生成代碼的運行:
http://hostname/index.php?r=country/index
可以看到一個柵格顯示著從數(shù)據(jù)表中讀取的國家數(shù)據(jù)。支持在列頭對數(shù)據(jù)進行排序,輸入篩選條件進行篩選。
可以瀏覽詳情,編輯,或刪除柵格中的每個國家。還可以點擊柵格上方的 “Create Country” 按鈕通過表單創(chuàng)建新國家。
下面列出由 Gii 生成的文件,以便你研習功能和實現(xiàn),或修改它們。
controllers/CountryController.php
models/Country.php
?和?models/CountrySearch.php
views/country
defined('YII_DEBUG') or define('YII_DEBUG', true);
// fcgi 默認沒有定義 STDIN 和 STDOUT
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
// 注冊 Composer 自動加載器require(__DIR__ . '/vendor/autoload.php');
// 包含 Yii 類文件require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
// 加載應(yīng)用配置$config = require(__DIR__ . '/config/console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
入口腳本是定義全局常量的最好地方,Yii 支持以下三個常量:
YII_DEBUG
:標識應(yīng)用是否運行在調(diào)試模式。當在調(diào)試模式下,應(yīng)用會保留更多日志信息,如果拋出異常,會顯示詳細的錯誤調(diào)用堆棧。因此,調(diào)試模式主要適合在開發(fā)階段使用,YII_DEBUG
?默認值為 false。YII_ENV
:標識應(yīng)用運行的環(huán)境,詳情請查閱配置章節(jié)。YII_ENV
?默認值為?'prod'
,表示應(yīng)用運行在線上產(chǎn)品環(huán)境。YII_ENABLE_ERROR_HANDLER
:標識是否啟用 Yii 提供的錯誤處理,默認為 true。當定義一個常量時,通常使用類似如下代碼來定義:
defined('YII_DEBUG') or define('YII_DEBUG', true);
上面的代碼等同于:
if (!defined('YII_DEBUG')) {
define('YII_DEBUG', true);
}
顯然第一段代碼更加簡潔易懂。