目录搜索
阅读前篇简介Yii 是什么从 Yii 1.1 升级入门安装 Yii运行应用第一次问候使用Forms数据库应用使用 Gii 生成代码进阶应用结构概述入口脚本应用(Applications)应用组件(Application Components)控制器(Controllers)模型(Models)视图(views)模块(Modules)过滤器(Filters)小部件(Widgets)前端资源(Assets)扩展(Extensions)请求处理运行概述启动引导(Bootstrapping)路由和创建URL请求(Requests)响应(Responses)Sessions 和 Cookies错误处理(Handling Errors)日志(Logging)关键概念组件(Component)属性(Property)事件(Events)行为(Behaviors)配置(Configurations)别名(Aliases)类自动加载(Autoloading)服务定位器(Service Locator)依赖注入容器(Dependency Injection Container)配合数据库工作数据库访问 (Data Access Objects)查询生成器(Query Builder)活动记录(Active Record)数据库迁移(Migrations)SphinxRedisMongoDBElasticsearch接收用户数据创建表单(Creating Forms)输入验证(Validating Input)文件上传(Uploading Files)收集列表输入(Collecting Tabular Input)多模型的复合表单(Getting Data for Multiple Models)显示数据格式化输出数据(Data Formatting)分页(Pagination)排序(Sorting)数据提供器(Data Providers)数据小部件(Data Widgets)客户端脚本使用(Working with Client Scripts)主题(Theming)安全认证(Authentication)授权(Authorization)处理密码(Working with Passwords)客户端认证(Auth Clients)最佳安全实践(Best Practices)缓存概述数据缓存片段缓存页面缓存HTTP 缓存RESTfull Web服务快速入门(Quick Start)资源(Resources)控制器(Controllers)路由(Routing)格式化响应(Response Formatting)授权认证(Authentication)速率限制(Rate Limiting)版本(Versioning)错误处理(Error Handling)开发工具调试工具栏和调试器使用Gii生成代码生成API文档测试概述(Overview)配置测试环境(Testing environment setup)单元测试(Unit Tests)功能测试(Function Tests)验收测试(Acceptance Tests)测试夹具(Fixtures)高级专题高级应用模板创建自定义应用程序结构控制台命令核心验证器(Core Validators)国际化收发邮件性能优化共享主机环境模板引擎集成第三方代码小部件Bootstrap 小部件Jquery UI助手类概述Array 助手(ArrayHelper)Html 助手(Html)Url 助手(Url)
文字

使用 Gii 生成代码

使用 Gii 生成代码

本章将介绍如何使用 Gii 去自动生成 Web 站点常用功能的代码。使用 Gii 生成代码非常简单,只要按照 Gii 页面上的介绍输入正确的信息即可。

贯穿本章节,你将会学到:

  • 在你的应用中开启 Gii
  • 使用 Gii 去生成活动记录类
  • 使用 Gii 去生成数据表操作的增查改删(CRUD)代码
  • 自定义 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') 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'] // 按需调整这里
],

Gii

生成活动记录类

选择 “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

CRUD 生成器

然后点击 “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 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'); // 加载应用配置$config = require(__DIR__ . '/config/console.php'); $application = new yii\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') or define('YII_DEBUG', true);
    

    上面的代码等同于:

    if (!defined('YII_DEBUG')) {
        define('YII_DEBUG', true);
    }
    

    显然第一段代码更加简洁易懂。

    常量定义应该在入口脚本的开头,这样包含其他 PHP 文件时,常量就能生效。
上一篇:下一篇: