【问题标题】:Laravel Voyager MutatorLaravel Voyager 突变体
【发布时间】:2021-05-10 22:46:25
【问题描述】:

我在使用 Voyager 时遇到了一些问题。我可以为属性创建访问器,如documentation 中所述。它可以很好地访问数据,但我还必须创建一个 Mutator 以在保存数据之前更改数据。显然,Voyager 没有实现,所以我尝试通过Laravel way 来实现。它在常见环境中也能很好地工作,但出于某种原因,Voyager 存在不同的行为

MutatorAccessor 之后调用,即使仅在浏览时:

<?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...

任何帮助表示赞赏:)

【问题讨论】:

    标签: php laravel voyager


    【解决方案1】:

    您可以尝试使用模型事件。使用保存事件。

    https://laravel.com/docs/8.x/eloquent#events

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2022-01-07
      • 2020-11-13
      • 2020-10-25
      • 2018-11-22
      • 2020-01-15
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多