如何为我的自定义属性分配值?我来自Yii2
背景,并且很简单。我在这里做的:
protected $appends = ['sites'];
public function getSitesAttribute()
{
return $this->sites;
}
public function setSitesAttribute($value)
{
$this->attributes['sites'] = $value;
}
尝试分配类似mymodel->sites = ['1', '2', '3']
的方法,但没有成功。尝试获取mymodel->sites
值后,将引发错误:undefined property 'sites'
。
答案 0 :(得分:1)
问题出在$this->sites
上。正确的是,它将引发您的类实例不具有属性$sites
的异常。
看看Model
的{{3}}方法。您可以在此处看到正在进行getAttribute($key)
的呼叫。深入研究,您会发现在某些时候,__get
方法中正在执行以下代码:
if ($this->hasGetMutator($key)) {
return $this->mutateAttribute($key, $value);
}
这段代码调用您的getSitesAttribute
方法。
transformModelValue
,您会看到它尝试通过调用$key
从属性数组中检索sites
(getAttributeFromArray($key)
)的值。这将返回存储在attributes
变量所在的setSitesAttribute
数组中的值。
我可以想到的以下选项:
$attributes
数组中检索值。protected $appends = ['sites'];
public function setSitesAttribute($value)
{
$this->attributes['sites'] = $value;
}
$sites
属性中并从中检索。不确定$appends
是否仍然有效。protected $appends = ['sites'];
private $sites = [];
public function getSitesAttribute()
{
return $this->sites;
}
public function setSitesAttribute($value)
{
$this->sites = $value;
}
答案 1 :(得分:1)
您的accessor
不太正确,请注意,您返回的不是$this->attributes['sites'];
,而是$this->sites
。
class MyModel extends Model
{
public function getSitesAttribute()
{
return $this->attributes['sites'];
}
public function setSitesAttribute($value)
{
$this->attributes['sites'] = $value;
}
}
然后;
$my_model->sites = [1,2,3];
$my_model->sites; // [1,2,3]
您可能想在模型构造函数中为$this->attributes['sites']
设置初始默认值。