2014-02-19 61 views
0

某些類具有名爲status(可以是0或1)的屬性。在相應的模型中,我定義了兩個變量STATUS_CLOSED = 1STATUS_OPEN = 2Yii - 使用模型函數(使用模型屬性)的CDetailView值

我使用的是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(可能使用這兩個函數)根據狀態值顯示相應的標籤。

我想這會工作:

$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; 
} 

那麼接下來你的widget會僅僅是這樣的:

$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() { 
    ... 
}