如何在Yii中扩展activeRecord模型

时间:2012-08-05 03:45:49

标签: yii

我正在尝试在Yii中创建一个被分页的表单。每个页面用于一组字段。我想,最好的方法是扩展ActiveRecord模型并为当前页面添加参数。这也允许我用自己的表单本身规则覆盖rules()方法。

我的问题是,Yii不允许我们本地扩展模型。我不得不重写getMetaData()方法,因为Yii自身运行self :: model(get_class($ this)),最终破坏了所有内容。

不仅如此,我还不能使用findByPk,因为Yii在很大程度上依赖于类名。

我知道有很多工作要做这项工作,但我想知道我是否遗漏了什么。

谢谢,

凯尔

- 编辑 -

我完全明白了,我完全感到愚蠢。我只需要覆盖model()方法来返回当前的模型类。

所以:

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}

是的......我觉得自己很蠢。

2 个答案:

答案 0 :(得分:3)

要扩展ActiveRecord模型,只需扩展它即可!您需要做的就是覆盖模型方法:

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}

答案 1 :(得分:0)

模型类是ActiveRecord的子类,因此您可以覆盖ActiveRecord的一些变量/方法。我的意思是没有必要再次扩展Activerecord!在定义模型时会扩展它!所以只需添加你需要的东西。当然,这种方式在每个模型类中手动添加代码都很不方便。如果它太多了,如果你正在使用gii,那么你可以修改gii用来生成模型的代码模板。