一部のプロパティの Yii モデルでは、実際のプロパティが null または空の場合にデフォルトを返したいと考えています。
たとえば、私がdisplay_name
財産を持っているとします。未設定の場合は返品したいfirst_name
です。
これまでのところ、私が使用してきた回避策は、別の名前で新しいメソッドを作成し、代わりにこれを呼び出すことです。$model->display_name
ただし、通常の方法で呼び出すだけでこれを達成できればいいのですが。
一部のプロパティの Yii モデルでは、実際のプロパティが null または空の場合にデフォルトを返したいと考えています。
たとえば、私がdisplay_name
財産を持っているとします。未設定の場合は返品したいfirst_name
です。
これまでのところ、私が使用してきた回避策は、別の名前で新しいメソッドを作成し、代わりにこれを呼び出すことです。$model->display_name
ただし、通常の方法で呼び出すだけでこれを達成できればいいのですが。
自分なりの答えを見つけたかもしれません。__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;
}
}
CComponent
を含む を拡張するクラスはCModel
、CActiveRecord
最初に getter メソッドを探します。
あなたの例では、ゲッター関数を定義する必要があります:
public function getdisplay_name() {
if (! empty($this->display_name)) {
return $this->display_name;
} else {
return $this->first_name;
}
}