2014-02-19 2 views
0

특정 클래스의 속성은 status (0 또는 1 일 수 있음)입니다. 해당 모델에서 나는 두 개의 변수 STATUS_CLOSED = 1STATUS_OPEN = 2을 정의했다.Yii - 모델 특성을 사용하는 CDetailView 값 (모델 특성 사용)

$this->widget('zii.widgets.CDetailView', array(
    'data'=>$model, 
    'attributes'=>array(
     'account_number', 
     'account_type', 
     array(
      'label'=>'Banco', 
      'type'=>'raw', 
      'value'=>CHtml::encode($model->bank->bank_name), 
     ), 
    ), 
)); 

내 모델에서 이러한 두 가지 기능을 정의 : 내가 필요

public function statusLabels() 
{ 
    return array(
     self::STATUS_CLOSED => 'Inactiva', 
     self::STATUS_OPEN => 'Activa', 
    ); 
} 

public function getStatusLabel($status) 
{ 
    $labels = self::statusLabels(); 

    if (isset($labels[$status])) { 
     return $labels[$status]; 
    } 

    return $status; 
} 

을 사용자 정의하는

는 나는 "보기"보기와 같은 내부 모델 정보를 표시 할 CDetailView을 사용하고 있습니다 CDetailView (이 두 함수를 사용하는 경우도 있음)를 사용하여 상태 값에 따라 해당 레이블을 표시합니다.

나는이 일 것이라고 생각 :

$this->widget('zii.widgets.CDetailView', array(
    'data'=>$model, 
    'attributes'=>array(
     'account_number', 
     'account_type', 
     array(
      'label'=>'Estado', 
      'type'=>'raw', 
      'value'=>$model->statusLabel($model->status), 
     ), 
    ), 
)); 

하지만 내가 얻을 : Missing argument 1 for BankAccount::getStatusLabel()

내가 잘못을하고있는 중이 야 뭐?

답변

1

좋아, 그래서 첫 번째 모델은 이미 자신의 상태가 그래서이 당신의 기능을 바꿀 것 알고 있기 때문에 당신이 모델의 상태에 보낼 필요가 없습니다 떨어져 : 그래서 다음 위젯 것

public function getStatusLabel() { 
    $labels = self::statusLabels(); 

    if (isset($labels[$this->status])) { 
     return $labels[$this->status]; 
    } 

    return $this->status; 
} 

$this->widget('zii.widgets.CDetailView', array(
    'data'=>$model, 
    'attributes'=>array(
     'account_number', 
     'account_type', 
     array(
      'label'=>'Estado', 
      'type'=>'raw', 
      'value'=>$model->statusLabel 
     ), 
    ), 
)); 

은 또한 그것은 오류가 발생하지 않습니다하지만 현실에서 당신은 기능 statusLabels() 정적 기능을해야한다 : 그냥이처럼.

public static function statusLabels() { 
    ... 
}