2014-02-19 59 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() { 
    ... 
}