【发布时间】:2021-05-10 22:46:25
【问题描述】:
我在使用 Voyager 时遇到了一些问题。我可以为属性创建访问器,如documentation 中所述。它可以很好地访问数据,但我还必须创建一个 Mutator 以在保存数据之前更改数据。显然,Voyager 没有实现,所以我尝试通过Laravel way 来实现。它在常见环境中也能很好地工作,但出于某种原因,Voyager 存在不同的行为。
Mutator 在 Accessor 之后调用,即使仅在浏览时:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
public function setNameAttribute($value){ // my mutator
$value = preg_replace("/[^a-zA-Z]/", '', $value);
$this->attributes['name'] = $value;
}
public function getNameBrowseAttribute(){ // my accessor
return $this->name . '...'; // example
}
}
发生了什么:
当我访问我的模型的浏览器时,应该调用getNameBrowseAttribute,但在那之后,也会调用setNameAttribute,这不应该发生,因为我正在浏览,而不是保存或更新模型。
我尝试调试代码,最后调用的 Voyager 文件是一个视图,来自voyager/storage/framework/views/,其中$data 是模型:
if ($data->{$row->field.'_browse'}) {
$data->{$row->field} = $data->{$row->field.'_browse'}; // <-- this line
}
如您所见,它调用的是带有...browse 的方法,而不是set...
任何帮助表示赞赏:)
【问题讨论】: