2012-08-05 102 views
2

我試圖在分頁的Yii中創建表單。每個頁面都是針對一組字段的。我想,最好的方法是擴展ActiveRecord模型併爲當前頁面添加一個參數。這也使我可以用我自己的規則爲表單本身重寫rules()方法。如何在Yii中擴展activeRecord模型

我的問題是,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

如果我正確地理解你,你想要做一個像嚮導一樣,對!如果是這樣,爲什麼你不使用這種行爲並根據您的確切需要進行配置? http://www.yiiframework.com/extension/wizard-behavior/ – Nimir 2012-08-05 09:40:49

+0

這實際上看起來非常酷,可能是我的解決方案。我會檢查出來的。謝謝! – Kyle 2012-08-05 15:37:39

回答

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);} 
} 
0

模型類是ActiveRecord的子類,所以你可以重寫一些Vars/ActiveRecord白化方法。我的意思是沒有必要再次擴展Activerecord ...!定義模型時會擴展它!所以只需在那裏添加你需要的任何東西。當然,這種方式在每個模型類中手動添加代碼是不方便的。如果它太多了,而且如果你使用的是gii,那麼你可以修改gii用於生成模型的代碼模板。

+0

我曾希望將所有特定的代碼都遺漏給我的表單。我的模型不需要所有的信息。 – Kyle 2012-08-05 15:36:11