YII入门 (4) -- 自定义Gii生成代码模板

来源:互联网 发布:highlight.js 行号 编辑:程序博客网 时间:2024/05/17 22:33
一、应用程序的配置如下:

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。
0 0
原创粉丝点击