我正在尝试在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);}
}
是的......我觉得自己很蠢。
答案 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用来生成模型的代码模板。