0

我有一个带有Component 属性的模型。每次初始化/获取此模型时,都应预先计算此值(有一个生成它的函数)。

我将此“默认值”放入属性的 getter 中:

public function getCid(){
    if ($this->_cid == null ){
        $this->_cid = generateCid();
    }
    return $this->_cid;
}

当我调用它时,它的 get 方法正常工作:

$model->cid; //returns good value

但是,当我尝试使用其他带有getAttributes()函数的参数来获取它时,它不会调用它的 get 方法。

$model->getAttributes(array('cid')); //just to try only this property.

我不想欺骗数组来独立获取它的值$model->cid并将其合并到getAttributes返回数组中,因为我的应用程序中有更多属性,我正在寻找一个快速的解决方案。

那么我应该在哪里移动这个生成器,或者我应该改变什么来轻松地获得这个生成的 id?

更新:

我创建了一个基础 ActiveRecord 类,它扩展了CActiveRecord并添加了以下函数:

public function getAttributes($names=true){
    $base = parent::getAttributes($names);
    foreach($base as $key => $value)
        if(!$this->hasAttribute($key))
            $base[$key] = $this[$key];

    return $base;
}

这会调用每个添加的属性的 get 方法,因此它会更新它的内容。

4

1 回答 1

1

你的实际模型是CActiveRecord模型吗?

根据CModel::getAttributes()的一部分显示的内容,根据您的模型类型,将有不同的方法来处理此问题。

但是,如果在您传入的数组中找到该值,则处理它的最快方法可能是getAttributes在您的模型中覆盖并让它对您的 getter 进行自定义调用。'cid'

您可能想查看CActiveRecord::getAttributes()的想法,覆盖它,然后parent::getAttributes()从您的自定义覆盖中调用您的。

于 2013-06-13T20:06:28.693 回答