Appearance
activitylog
安装配置
activitylog 是用于记录全站动态的扩展包。
4.1 及以上需要 php 8
首先安装扩展包
composer require spatie/laravel-activitylog
生成迁移文件
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"
创建数据表
php artisan migrate
生成配置文件
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-config"
基本使用
创建动态是非常简单的,下面是创建动态的操作示例。你可以将代码写在模型的 Observer 中。
activity()
->causedBy(Auth::user()) //causer_type与causer_id字段
->performedOn($comment) //subject_type与subject_id字段
->withProperties([]) //properties属性
->event('created') //event属性
->log('created'); //description属性
下面对属性进行说明
属性 | 说明 |
---|---|
causedBy | 创建动态的用户 |
performedOn | 产生动态的模型 |
withProperties | 动态属性 |
useLog | 动态事件 如 created,可以修改 activitylog.php 配置文件的 default_log_name 属性定义默认事件 |
log | 动态描述 |
模型定义
除了上面的链式方法使用外,也可以在模型中定义,让动态在模型变化时自动创建。
下面示例在 Comment 模型执行新增事件时,生成动态。并通过 getDescriptionForEvent
方法返回动态的描述。
...
use Spatie\Activitylog\Traits\LogsActivity;
class Comment extends Model
{
use HasFactory, LogsActivity;
...
//动态记录事件
protected static $recordEvents = ['created'];
/**
* 动态描述
* @param string $eventName
* @return string
*/
public function getDescriptionForEvent(string $eventName): string
{
return mb_substr(strip_tags($this->html), 0, 50);
}
...
}
...
查询动态
查询动态使用和普通模型的操作是一致的。
基本使用
下例查看所有动态,并通过资源处理后返回到前台。
namespace App\Http\Controllers;
use App\Http\Resources\ActivityResource;
use Illuminate\Http\Request;
use Spatie\Activitylog\Models\Activity;
class ActivityController extends Controller
{
public function index()
{
return ActivityResource::collection(Activity::paginate(10));
}
}
动态资源类
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ActivityResource extends JsonResource
{
public function toArray($request)
{
return parent::toArray($request) + [
//动态生成的模型
'subject' => $this->subject,
//产生动态的用户
'causer' => $this->causer,
];
}
}
用户动态
下面是查询编号为 5 的用户动态
Activity::where('causer_id', 5)->with(['causer:id,name'])->latest()->paginate(10);