📅  最后修改于: 2023-12-03 15:35:02.369000             🧑  作者: Mango
Spatie Laravel Activitylog 是一个强大的 Laravel 扩展包,用于记录模型的操作日志。它可以轻松地记录模型的创建、更新、删除等操作,并且提供了丰富的功能,比如版本控制、事件广播等。
在默认情况下,Spatie Laravel Activitylog 会记录模型的全部属性,包括被更改的和未被更改的属性。有时候,我们只想记录被更改的属性,这时可以使用该扩展包提供的 properties()
和 oldProperties()
方法,仅记录被更改的属性和旧属性。
首先,需要使用 Composer 安装 Spatie Laravel Activitylog:
composer require spatie/laravel-activitylog
然后,根据 Laravel 版本执行下面的命令:
# Laravel 5.5 及以上版本
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider"
# Laravel 5.4 及以下版本
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
执行完以上命令后,还需要运行迁移:
php artisan migrate
假设有一个 Post
模型,需要记录其更新操作的日志。首先,在 Post
模型中使用 LogsActivity
trait:
use Spatie\Activitylog\Traits\LogsActivity;
class Post extends Model
{
use LogsActivity;
// ...
}
然后,在该模型中添加一个 $fillable
属性,用于指定可被记录的属性:
protected $fillable = [
'title',
'body',
];
在更新 Post
模型时,使用 logChanges()
方法记录更改的属性和旧属性。比如:
$post = Post::find(1);
$post->title = 'New Title';
$post->body = 'New Body';
$post->logChanges();
最后,在需要显示日志的地方使用 changes()
方法。比如,在视图中可以这样使用:
<ul>
@foreach ($post->activity as $activity)
<li>{{ $activity->created_at }}: {{ $activity->description }} {{ $activity->changes() }}</li>
@endforeach
</ul>
注意,changes()
方法会返回一个 Markdown 格式的字符串,用于标记被更新的属性和旧属性。如果需要在视图中将 Markdown 格式转化为 HTML,可以使用 parsedown 或 markdown 等库。
Spatie Laravel Activitylog 是一个非常强大的 Laravel 扩展包,提供了多种方便实用的功能,能够帮助我们轻松地记录模型的操作日志。使用该扩展包记录模型的更改操作时,可以使用 properties()
和 oldProperties()
方法,仅记录被更改的属性和旧属性,从而使日志更加清晰明了。