Yii - 使用模型函数的CDetailView值(使用模型属性)

时间:2014-02-19 18:30:27

标签: php yii

某些类具有名为status的属性(可以是0或1)。在相应的模型中,我定义了两个变量STATUS_CLOSED = 1STATUS_OPEN = 2

我正在使用CDetailView在" View"中显示模型信息。看起来像:

$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 个答案:

答案 0 :(得分: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() {
    ...
}