我有一个带有一些基本值的模型类,现在我想用计算出的ID字段扩展它。在我的系统中,我们为每个实体使用一个ID,它包含实体的类型和DB中的自动增量ID。
我需要一个参数,现在调用它$cid
(计算的id),它在初始化时设置。
我试图在init / model函数中设置它,但我得到Property "Product.cid" is not defined.
例外。
我试图创建一个函数:
public function _cid($value = null) {
if($value == null){
return $this->cid;
}else{
$this->cid = $value;
return $this->cid;
}
}
我应该如何扩展我的模型以将此值作为模型的参数?
更新
乔恩回答得非常好,the official docs真的很有帮助。但是,有了这个解决方案,现在我只调用getCid
函数,当我独立调用它时。当我通过模型的getAttributes($model->safeAttributeNames)
(或getAttributes(array('cid'))
)调用它时,我得到null
作为$ model-> cid的值,并且不会调用getCid
方法。 (属性设置为安全)
答案 0 :(得分:3)
为什么不简单地使用只读属性?
private $_cid;
public function getCid()
{
if ($this->_cid) === null {
// calculate the value here on demand
$this->_cid = 'whatever';
}
return $this->_cid;
}
由于__get
中CComponent
的实施,您可以将此值作为$model->cid
的属性进行访问。