【扩展推荐】Laravel-activitylog 记录用户行为扩展包
39

说明

在实际项目中,我们可能需要记录用户某些的行为,如登录、退出、发布文章等,使用 spatie/laravel-activitylog 扩展包可以非常方便快捷的完成此逻辑。

1. 安装

1). 使用 composer 安装:

// L5.1 运行:
composer require spatie/laravel-activitylog:1.3.1

// L5.1 之后的版本运行:
composer require spatie/laravel-activitylog

2). 修改 config/app 文件,在 providers 数组内追加如下内容:

'providers' => [
    ...
    Spatie\Activitylog\ActivitylogServiceProvider::class,
],

3). 生成数据表和配置文件

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
php artisan migrate 

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"

生成的配置文件保持默认设置即可,一般项目都能通用。

2. 基础用法

1). 直接记录当前登录用户的行为

activity()->log('登录成功');
activity()->log('发帖成功');

2). 记录某个指定用户的行为

$user = User::find(31);
activity()->causedBy($user)->log('登录成功');
activity()->causedBy($user)->log('发帖成功');

我们看一下数据表,即可发现对应的数据已经录入。

file

3). 获取某个用户的记录

此扩展包是以 Eloquent 的方式数据查询操作,下面是例子:

use Spatie\Activitylog\Models\Activity;

...

// 使用 Eloquent 的方式进行查询
$data = Activity::where('causer_id', $user_id)->get();

3. 更多用法

上文的「基础用法」已经能满足大部分的项目需求。除了上文介绍的基础用法,此拓展包还有以下高级用法:

  1. 定期清理过期数据;
  2. 通过 model 的事件驱动自动记录数据;
  3. 可通过 properties 记录自定义数据;
  4. 可以查询记录用户的 changelog;
  5. 可通过 log_name 对数据进行分类;

这些用法大家可以查阅 官方文档 自行阅读,在这里不做过多描述。

以上。

本帖已被设为精华帖!
本帖由系统于 2年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

好东西,准备在项目中用!

2年前

一直想要这个,感谢分享

2年前

试了一下,发现 log_namedescription 都是 varchar 类型,这样数据库查询时效率会不会很低?感觉可以改成 int,然后再配置文件里面写常量做映射。

2年前

感谢感谢

1年前

如果有需要记录客户端IP字段,在迁移文件添加了ip字段,有没有自带属性将IP写入数据表

1年前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!