2012-11-15 65 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