View on GitHub

yii2-cookbook-chinese

Yii Application Development Cookbook(Third Edition)中文翻译

代码生成器

Yii2提供了强大的模块Gii来生成模型、控制器和视图,并在此基础上方便进行修改和自定义。对于快速开发是一个非常有用的工具。

在本部分中,我们将会探索如何使用Gii并生成代码。例如,你有一个数据库,其中有一张表film,你希望为这张表创建带有CRUD操作的应用。这很容易。

准备

  1. 按照官方指导http://www.yiiframework.com/doc-2.0/guide-start-installation.html中的描述,使用composer创建一个新应用。
  2. http://dev.mysql.com/doc/index-other.html下载Sakila数据库。
  3. 执行下载的SQLs: 首先是schema然后是数据。
  4. 为了使用Sakila数据库,需要在config/main.php中配置数据库连接。
  5. 通过命令./yii serve运行你的web服务器。

如何做…

  1. 访问网址http://localhost:8080/index.php?r=gii,并选择模型生成器(Model Generator)。
  2. 填写表名(Table Name)actor和模型类(Model Class)Actor,并点击页面底部的生成(Generate)按钮。

  1. 点击yii代码生成器(yii code generator)logo返回到Gii主菜单,并选择CRUD生成器(CRUD Generator)。
  2. 填写Model Class内容app\models\Actor和Controller Class内容app\controllers\ActorController。

  1. 点击页面底部的预览(Preview)按钮,并点击绿色生成(Generate)按钮。
  2. 访问网址http://localhost:8080/index.php?actor/create检查生成的效果。

工作原理…

如果你检查你的项目结构,你将会看到自动生成的代码:

首先我们已经创建了Actor模型。Gii自动创建所有的模型规则,这依赖于mysql字段类型。例如,如果在你的MySQL数据库actor表中,字段first_name和last_name有IS NOT NULL标志,那么Yii会自动为它们创建规则required,并设置最大长度为45个字符,因为在我们的数据库中,这个字段的最大长度被设置成了45。

public function rules()
{
    return [
        [['first_name', 'last_name'], 'required'],
        [['last_update'], 'safe'],
        [['first_name', 'last_name'], 'string', 'max' => 45],
    ];
}

并且Yii会自动基于数据库中的外键创建两个模型之间的联系。在我们的例子中,自动创建了两个关系。

public function getFilmActors()
{
    return $this->hasMany(FilmActor::className(), ['actor_id' => 'actor_id']);
}
public function getFilms()
{
    return $this->hasMany(Film::className(), ['film_id' => 'film_id'])->viaTable('film_actor', ['actor_id' => 'actor_id']);
}

创建这个关系的原因是在数据库中我们有两个外键。film_actor表的外键fk_film_actor_actor指向了actor表中的actor_id字段,外键fk_film_actor_film指向了film表中的film_id字段。

注意你还没有生成FilmActor模型。所以,如果你希望开发完善的app,而不只是一个demo,你必须生成Film、FilmActor模型。接下来的内容,可以参考http://www.yiiframework.com/doc-2.0/guide-start-gii.html