讓我們假設,我們稱之爲「UsersModule」模塊,在它下面的模型:在yii框架中運行時生成類是個壞主意?
class User extends CActiveRecord
{
// Some code here
}
我們在不同的應用中使用這個模塊和一定的時間,我們希望擴展用戶模型中加入一些自定義的方法或屬性它。更重要的是,我們通常希望更改數據庫中的表以將新的屬性存儲在其中。但是我們不想在UsersModule本身中更改代碼,因爲它來自主存儲庫(例如,GitHub),當我們修復其中的一些錯誤時,我們只想從所有項目中的存儲庫更新此模塊。同時,我們希望保存爲項目所做的自定義更改。因此,我們有以下想法:
在UsersModule.php我們執行下列操作:
class UsersModule extends CWebModule
{
public $usersBaseClass = 'UsersBase';
}
在Users.php:
$extendClass = Yii::app()->getModule('users')->usersBaseClass;
$version = '1.0';
$usersFile = Yii::getPathOfAlias('application.runtime').'/Users_extends_'.$extendClass.'_v'.$version.'.php';
if(!file_exists($usersFile)) {
$code =<<<PHP
<?php
/**
* This is the model class for table "{{users}}".
*/
class Users extends {$extendClass}
{
/**
* Returns the static model of the specified AR class.
* @param string \$className active record class name.
* @return Users the static model class
*/
public static function model(\$className=__CLASS__)
{
return parent::model(\$className);
}
}
PHP;
file_put_contents($usersFile, $code);
}
if(!class_exists('Users', flase))
require_once($usersFile);
而且我們介紹UsersBase.php:
class UsersBase extends CActiveRecord
{
// All base Users model logic is here
}
因此,當我們在應用程序的某處使用Users類時,我們在Users.php中的代碼會生成真正的Users類,找到所需的基類。在當我們要擴大我們的用戶模型中,我們可以做以下各項目:該項目的
在CONFIGS/main.php:
'modules' =>
'users => array(
'usersBaseClass' => 'MyUsers'
)
而且我們在我們的應用程序中添加一些MyUsers.php哪裏:
class MyUsers extends UsersBase
{
// All the custom logic goes here
}
所以我的問題是:
這是個好主意,生成類在運行時自動或不?