给出以下代码:
class Picture {
public function getAbsolutePathAttribute() {
return "absolute_path"
}
}
$picture = new Picture();
echo $picture->absolute_path; // prints "absolute_path"
$picture->absolute_path = "I will override you no matter what";
echo $picture->absolute_path; // prints "absolute_path"
是否有改写雄辩的mutator属性的方法?
我尝试了一种神奇的方法:
setAbsolutePathAttribute($value) {
$this["attributes"] = $value;
}
然而它没有用。
答案 0 :(得分:2)
所以我不建议通过覆盖mutator来解决这个问题。你可能会,但你越少接触Laravel的核心就越好。为什么?因为你永远不知道未来的Laravel代码会是什么样子。
下次进行轻微或主要的Laravel版本升级时,核心更改可能会破坏您的内部覆盖。
所以,有两种解决方法,给出一个简单的例子:
1。在数据库级别创建默认值
Laravel迁移具有默认的列修饰符,它看起来像这样:->default('something')
这样你根本不需要使用mutator来获取你正在寻找的默认值。
您可以在此处详细了解它们:https://laravel.com/docs/5.6/migrations#column-modifiers
2。让您的访问者更智能
你的例子非常简单,所以我只是使用它:
class Picture {
public function getAbsolutePathAttribute() {
if(is_null($this->absolute_path)) {
return "absolute_path";
}
return $this->absolute_path;
}
}
这样,只有在没有价值的情况下它才会有所作为。