2012-11-15 4 views
1

일부 속성에 대한 내 Yii 모델에서 실제 속성이 null 또는 비어있을 때 일부 기본값을 반환하고 싶습니다.ActiveRecord 오버라이드 Yii에서 속성 가져 오기

예를 들어 display_name 속성이 있습니다. 설정되지 않은 경우 first_name을 반환하고 싶습니다.

지금까지 사용해온 작업은 다른 이름으로 새 메서드를 만들고 대신이 메서드를 호출하는 것입니다. 그러나 간단하게 $model->display_name을 호출하여이 작업을 수행 할 수 있다면 좋을 것입니다.

답변

3

나는 내 자신의 대답을 발견했을 수도 있습니다. 이것이 내가 찾고있는 자산인지 확인하기 위해 __get()을 무시하고 있습니다. 이것이 "모범 사례"로 간주되는지 확신하지 못합니다. CModel, CActiveRecord 포함 CComponent 연장

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

이 나중에 큰 스위치 케이스 문에서 발생합니다을, 난 내 대답 – Blacksonic

+1

에 쉽고 청소기 솔루션을 설명했습니다 내 질문에, 나는 이미 비슷한 해결책을 가지고 있었다. 그러나 모든 기능을 기억하지 않아도되고 일부 모듈이나 확장 기능이 나에 의해 코딩되지 않을 수도 있습니다. –

+1

버전 2에서 변경 될 것이라고 생각합니다. 사용자 정의'getX()'메소드를 정의한 경우 모델에 이미 x 속성이 정의되어 있어도 ** ** override 메소드가 대신 호출되어야합니다. –

0

클래스들은 제 게터 방법을 찾을 것이다. 당신의 예에서

, 당신은 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