YII入门 (四) - 自定义Gii生成代码模板
YII入门 (4) -- 自定义Gii生成代码模板
一、应用程序的配置如下:
return array(
......
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'在这里填写密码',
// 'ipFilters'=>array(...IP 列表...),
// 'newFileMode'=>0666,
// 'newDirMode'=>0777,
),
),
);
在上面,我们声明了一个名为 gii的模块,它的类是 GiiModule。我们也为这个模块设置了一个密码,我们访问 Gii 时会有一个输入框要求填写这个密码。
出于安全考虑,默认情况下只允许本机访问 Gii。若允许其他可信赖的机器访问它,我们需要如上所示配置 GiiModule::ipFilters属性。
GiiModule::newFileMode和 GiiModule::newDirMode属性控制如何生成新文件和新目录。
Gii 有一些默认的代码生成器。每个代码生成器负责生成特定类型的代码。例如 controller 生成器生成一个 controller 类以及一些 action view 脚本; model 生成器为指定的数据表生成一个 ActiveRecord 类。
二、定制已存在的代码生成器的代码模板
1、代码生成器的架构:
一个代码生成器存储在一个目录中,这个目录的名字被认为是生成器的名字。目录通常由如下内容组成:
model/ the model generator root folder
ModelCode.php the code model used to generate code
ModelGenerator.php the code generation controller
views/ containing view scripts for the generator
index.php the default view script
templates/ containing code template sets
default/ the 'default' code template set
model.php the code template for generating model class code
2、生成器搜索路径
Gii 在GiiModule::generatorPaths属性指定的目录中查找可用的生成器。 当需要定制时,我们可以在应用程序的配置文件中做如下配置,
return array(
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
... ...
'generatorPaths'=>array(
'application.gii',
),
),
),
);
上面的配置告诉 Gii 在别名是 application.gii的目录中寻找生成器,以及默认的位置 system.gii.generators。
3、定制代码模板
这是扩展 Gii 最容易最常用的方式。我们使用一个例子来介绍如何定制代码模板。假设我们想要定制由 model 生成器生成的代码。
我们首先创建一个名为 protected/gii/model/templates/compact的目录。这里的 model意味着我们将要 override默认的 model 生成器。 templates/compact意味着我们将增加一个新的代码模板集名为 compact。
然后我们在应用程序配置里把 application.gii增加到 GiiModule::generatorPaths。如上所示。
复制文件 framework/gii/generators/model/templates/default/model.php到 protected/gii/model/templates/compact。
打开文件 protected/gii/model/templates/compact/model.php以编辑它。记得这个文件将作为类似一个视图文件被使用,意味着它可以包含 PHP 表达式和语句。让我们更改模板以便生成的代码里 attributeLabels()方法使用 Yii::t()来翻译属性标签:
public function attributeLabels()
{
return array(
<?php foreach($labels as $name=>$label): ?>
<?php echo "'$name' => Yii::t('application', '$label'),\n"; ?>
<?php endforeach; ?>
);
}
在每个代码模板中,我们可以访问一些预定义的变量,例如上面例子中的 $labels。这些变量由对应的代码生成器提供。不同的代码生成器可能在他们的代码模板中提供不同的变量。请认真阅读默认代码模板中的描述。
现在打开 model 代码生成器页面。点击 Code Template输入框。我们应当看到一个下拉列表,这个列表包含了我们新建的模板目录 compact。
一、应用程序的配置如下:
return array(
......
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'在这里填写密码',
// 'ipFilters'=>array(...IP 列表...),
// 'newFileMode'=>0666,
// 'newDirMode'=>0777,
),
),
);
在上面,我们声明了一个名为 gii的模块,它的类是 GiiModule。我们也为这个模块设置了一个密码,我们访问 Gii 时会有一个输入框要求填写这个密码。
出于安全考虑,默认情况下只允许本机访问 Gii。若允许其他可信赖的机器访问它,我们需要如上所示配置 GiiModule::ipFilters属性。
GiiModule::newFileMode和 GiiModule::newDirMode属性控制如何生成新文件和新目录。
Gii 有一些默认的代码生成器。每个代码生成器负责生成特定类型的代码。例如 controller 生成器生成一个 controller 类以及一些 action view 脚本; model 生成器为指定的数据表生成一个 ActiveRecord 类。
二、定制已存在的代码生成器的代码模板
1、代码生成器的架构:
一个代码生成器存储在一个目录中,这个目录的名字被认为是生成器的名字。目录通常由如下内容组成:
model/ the model generator root folder
ModelCode.php the code model used to generate code
ModelGenerator.php the code generation controller
views/ containing view scripts for the generator
index.php the default view script
templates/ containing code template sets
default/ the 'default' code template set
model.php the code template for generating model class code
框架生成Controller的模板为:framework/gii/generators/controller/templates/default/controller.php
框架生成Model的模板为:framework/gii/generators/model/templates/default/model.php
2、生成器搜索路径
Gii 在GiiModule::generatorPaths属性指定的目录中查找可用的生成器。 当需要定制时,我们可以在应用程序的配置文件中做如下配置,
return array(
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
... ...
'generatorPaths'=>array(
'application.gii',
),
),
),
);
上面的配置告诉 Gii 在别名是 application.gii的目录中寻找生成器,以及默认的位置 system.gii.generators。
在不同的搜索路径有同名的生成器也是可以的。这种情况下,在 GiiModule::generatorPaths指定目录中先出现的生成器有优先权。
3、定制代码模板
这是扩展 Gii 最容易最常用的方式。我们使用一个例子来介绍如何定制代码模板。假设我们想要定制由 model 生成器生成的代码。
我们首先创建一个名为 protected/gii/model/templates/compact的目录。这里的 model意味着我们将要 override默认的 model 生成器。 templates/compact意味着我们将增加一个新的代码模板集名为 compact。
然后我们在应用程序配置里把 application.gii增加到 GiiModule::generatorPaths。如上所示。
复制文件 framework/gii/generators/model/templates/default/model.php到 protected/gii/model/templates/compact。
打开文件 protected/gii/model/templates/compact/model.php以编辑它。记得这个文件将作为类似一个视图文件被使用,意味着它可以包含 PHP 表达式和语句。让我们更改模板以便生成的代码里 attributeLabels()方法使用 Yii::t()来翻译属性标签:
public function attributeLabels()
{
return array(
<?php foreach($labels as $name=>$label): ?>
<?php echo "'$name' => Yii::t('application', '$label'),\n"; ?>
<?php endforeach; ?>
);
}
在每个代码模板中,我们可以访问一些预定义的变量,例如上面例子中的 $labels。这些变量由对应的代码生成器提供。不同的代码生成器可能在他们的代码模板中提供不同的变量。请认真阅读默认代码模板中的描述。
现在打开 model 代码生成器页面。点击 Code Template输入框。我们应当看到一个下拉列表,这个列表包含了我们新建的模板目录 compact。