2012-11-15 63 views
1

在我的一些屬性的Yii模型中,當真實屬性爲null或爲空時,我想返回一些默認值。重寫ActiveRecord在Yii中獲取屬性

例如說我有一個display_name屬性。沒有設置時,我想返回first_name

到目前爲止,我一直在使用的解決方法是創建一個名稱不同的新方法,然後調用此方法。不過,如果我可以通過簡單地以正常方式調用$model->display_name來實現這一點,那就太好了。

回答

3

我可能找到了我自己的答案。我優先於__get()來檢查這是否是我正在尋找的財產。我不確定這被認爲是「最佳做法」。

public function __get($name) { 
      $current = parent::__get($name); 
      switch($name){ 
       case 'display_name': 
        if(empty($current)){ 
         return $this->first_name; 
        } 
        else{ 
         return $current; 
        } 
        break; 
       default: 
        return $current; 
      } 
     } 
+0

這將在後面的大開關case語句的結果,我已經正如我所提到的描述更容易和更清潔的解決方案,我的回答 – Blacksonic

+1

我的問題,我已經有了類似的解決方案。但我試圖不必爲所有人記憶備用功能,再加上一些模塊或擴展可能不會被我編碼。 –

+1

我認爲這將在版本2中改變。如果我們定義一個自定義的getX()方法,那麼即使模型已經定義了x屬性,也應該調用**我們的**覆蓋方法。 –

0

類延伸CComponent,包括CModelCActiveRecord第一將尋找一個getter方法。

在你的榜樣,你必須定義一個getter函數:

public function getdisplay_name() { 
    if (! empty($this->display_name)) { 
     return $this->display_name; 
    } else { 
     return $this->first_name; 
    } 
} 
+3

請檢查CActiveRecord :: __ get()implmenentation。當display_name是數據庫屬性時,您的示例不適用於CActiveRecord的實例。 – sieppl