我在使用航行者时遇到了一些问题。我可以创建属性的访问器,如文档中所描述的。它可以很好地访问数据,但在保存数据之前,我还必须创建一个Mutator来更改数据。显然,旅行者没有实现它,所以我尝试通过拉威尔式来实现它。它在普通环境中也能很好地工作,但是由于某种原因,旅行者有一个不同的行为。
Mutator是在访问器之后调用的,即使仅在浏览时:
<?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...调用方法。
如有任何帮助,我们将不胜感激:)
发布于 2021-11-18 13:40:37
你可以试着处理模型事件。使用保存事件。
https://stackoverflow.com/questions/66082819
复制相似问题