©
This document usesPHP Chinese website manualRelease
本章将介绍如何使用 Gii 去自动生成 Web 站点常用功能的代码。使用 Gii 生成代码非常简单,只要按照 Gii 页面上的介绍输入正确的信息即可。
贯穿本章节,你将会学到:
Gii 是 Yii 中的一个模块。可以通过配置应用的 yii\base\Application::modules 属性开启它。通常来讲在config/web.php
文件中会有以下配置代码:
$config= [ ... ];if(YII_ENV_DEV) {$config['bootstrap'][] ='gii';$config['modules']['gii'] ='yii\gii\Module'; }
这段配置表明,如果当前是开发环境,应用会包含gii
模块,模块类是 yii\gii\Module。
如果你检查应用的入口脚本web/index.php
,将看到这行代码将YII_ENV_DEV
设为 true:
defined('YII_ENV')ordefine('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 首页的链接)去生成活动记录类。并像这样填写表单:
country
Country
然后点击 “Preview” 按钮。你会看到models/Country.php
被列在将要生成的文件列表中。可以点击文件名预览内容。
如果你已经创建过同样的文件,使用 Gii 会覆写它,点击文件名旁边的diff
能查看现有文件与将要生成的文件的内容区别。
想要覆写已存在文件,选中 “overwrite” 下的复选框然后点击 “Generator”。如果是新文件,只点击 “Generator” 就好。
接下来你会看到一个包含已生成文件的说明页面。如果生成过程中覆写过文件,还会有一条信息说明代码是重新生成覆盖的。
CRUD 代表增,查,改,删操作,这是绝大多数 Web 站点常用的数据处理方式。选择 Gii 中的 “CRUD Generator” (点击 Gii 首页的链接)去创建 CRUD 功能。本例 “country” 中需要这样填写表单:
app\models\Country
app\models\CountrySearch
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/countrydefined('YII_DEBUG')ordefine('YII_DEBUG',true);// fcgi 默认没有定义 STDIN 和 STDOUTdefined('STDIN')ordefine('STDIN', fopen('php://stdin','r')); defined('STDOUT')ordefine('STDOUT', fopen('php://stdout','w'));// 注册 Composer 自动加载器require(__DIR__.'/vendor/autoload.php');// 包含 Yii 类文件require(__DIR__.'/vendor/yiisoft/yii2/Yii.php');// 加载应用配置$config=require(__DIR__.'/config/console.php');$application=newyii\console\Application($config);$exitCode=$application->run();exit($exitCode);
入口脚本是定义全局常量的最好地方,Yii 支持以下三个常量:
YII_DEBUG
:标识应用是否运行在调试模式。当在调试模式下,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆栈。因此,调试模式主要适合在开发阶段使用,YII_DEBUG
默认值为 false。YII_ENV
:标识应用运行的环境,详情请查阅配置章节。YII_ENV
默认值为'prod'
,表示应用运行在线上产品环境。YII_ENABLE_ERROR_HANDLER
:标识是否启用 Yii 提供的错误处理,默认为 true。当定义一个常量时,通常使用类似如下代码来定义:
defined('YII_DEBUG')ordefine('YII_DEBUG',true);
上面的代码等同于:
if(!defined('YII_DEBUG')) { define('YII_DEBUG',true); }
显然第一段代码更加简洁易懂。