代码生成器
Yii2提供了强大的模块Gii来生成模型、控制器和视图,并在此基础上方便进行修改和自定义。对于快速开发是一个非常有用的工具。
在本部分中,我们将会探索如何使用Gii并生成代码。例如,你有一个数据库,其中有一张表film,你希望为这张表创建带有CRUD操作的应用。这很容易。
准备
- 按照官方指导http://www.yiiframework.com/doc-2.0/guide-start-installation.html中的描述,使用composer创建一个新应用。
- 从http://dev.mysql.com/doc/index-other.html下载Sakila数据库。
- 执行下载的SQLs: 首先是schema然后是数据。
- 为了使用Sakila数据库,需要在config/main.php中配置数据库连接。
- 通过命令./yii serve运行你的web服务器。
如何做…
- 访问网址http://localhost:8080/index.php?r=gii,并选择模型生成器(Model Generator)。
- 填写表名(Table Name)actor和模型类(Model Class)Actor,并点击页面底部的生成(Generate)按钮。
- 点击yii代码生成器(yii code generator)logo返回到Gii主菜单,并选择CRUD生成器(CRUD Generator)。
- 填写Model Class内容app\models\Actor和Controller Class内容app\controllers\ActorController。
- 点击页面底部的预览(Preview)按钮,并点击绿色生成(Generate)按钮。
- 访问网址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。