我們使用一個例子來介紹如何定制代碼模板。假設我們想要定制由 model 生成器生成的代碼。
我們首先創建一個名為 protected/gii/model/templates/customer 的目錄。這里的model意味着我們將要 override 默認的 model 生成器。templates/customer意味着我們將增加一個新的代碼模板集名為customer。復制文件 framework/gii/generators/model/templates/default/model.php 到 protected/gii/model/templates/customer。現在是時候做點真正的工作了。打開文件 protected/gii/model/templates/customer/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 輸入框。我們應當看到一個下拉列表 ,這個列表包含了我們新建的模板目錄 customer。我們選擇此模板生成代碼文件。
框架生成Controller的模板為:framework/gii/generators/controller/templates/default/controller.php
框架生成Model的模板為:framework/gii/generators/model/templates/default/model.php
高級 )創建新的生成器
在framework/gii/generators創建widget文件夾,可以編寫支持module的Crud Generator,moduleID下model class的寫法application.modules.moduleID.models.modelClass
可以把自己擴展的gii放到項目目錄下面,配置如下
- 'modules' => array(
- 'gii' => array(
- 'class' => 'system.gii.GiiModule',
- 'password' => 'gii',
- 'generatorPaths' => array(
- 'application.gii.generators',//項目目錄結構
- ),
- 'ipFilters' => array('127.0.0.1', '::1'),
- ),
- ),
上面的配置告訴 Gii在別名是application.gii.generators的目錄中尋找生成器,以及默認的framework位置 system.gii.generators在不同的搜索路徑有同名的生成器也是可以的。這種情況下,在 GiiModule::generatorPaths 指定目錄中先出現的生成器有優先權 。