【问题标题】:class xxx contains 1 abstract method and must therefore be declared abstract or implement the remaining methods App\Models\xxx::getActivitylogOptionsxxx 类包含 1 个抽象方法,因此必须声明为抽象方法或实现其余方法 App\Models\xxx::getActivitylogOptions
【发布时间】:2021-08-02 04:41:50
【问题描述】:

您好,我正在使用 Laravel-activitylog,当我尝试将火车添加到模型时,它给了我这个错误

类 App\Models\Setting 包含 1 个抽象方法,因此必须声明为抽象方法或实现其余方法 (App\Models\Setting::getActivitylogOptions)

这是我所有的模型代码

    namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Astrotomic\Translatable\Translatable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Spatie\Activitylog\Traits\LogsActivity;

class Setting extends Model
{
    use Translatable,SoftDeletes;
    use LogsActivity;

    

    public $translatedAttributes = ['name', 'slogan', 'description', 'summary', 'address'];
    protected $fillable = ['id', 'logo', 'favicon', 'phone', 'email', 'facebook', 'twitter', 'instagram', 'created_at', 'updated_at'];

    // protected static $logAttributes = ['name', 'logo'];



    public static  function check()
    {
        $setting = Self::all();
        if(count($setting)<1)
        {
            $arrayName = array();
            $arrayName['id']= 1;

            foreach(config("app.languages") as $key => $language)
            {
                $arrayName[$key]['name'] = $language;
                $arrayName[$key]['description'] = $language;
            }
            Self::create($arrayName);
        }
        return $setting = Self::where('id','1')->first();
    }
}

【问题讨论】:

    标签: laravel-8 activitylog


    【解决方案1】:

    看起来您使用的是 laravel-activitylog 版本 4,在这种情况下您应该添加:

    use Spatie\Activitylog\LogOptions;
    

    还有getActivitylogOptions()方法,例如:

     public function getActivitylogOptions()
     {
         return LogOptions::defaults()
             -> logOnly(['text'])
             -> logOnlyDirty()
             -> dontSubmitEmptyLogs();
     }
    

    如果您使用的是 PHP 8,请不要忘记声明返回类型:

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults();
    }
    

    更多信息在这里:https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/logging-model-events

    对于您在代码中使用的格式,您也可以使用以前的版本,在composer中表示: “spatie/laravel-activitylog”:“^3”,并遵循此文档:https://spatie.be/docs/laravel-activitylog/v3/introduction

    【讨论】:

    • 是的,它现在对我有用..这是完美的答案..非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多