在 Yii2 中,可以通过注册事件来记录用户操作日志,以便跟踪和监控用户的行为。以下是一个示例:
首先,在应用的配置文件中注册事件,例如在 config/web.php
中添加如下代码:
return [
'components' => [
// ...
],
'on beforeAction' => function ($event) {
$controller = $event->action->controller->id; // 获取当前控制器 ID
$action = $event->action->id; // 获取当前动作 ID
$user = Yii::$app->user;
// 记录用户操作日志
$log = new UserLog();
$log->user_id = $user->isGuest ? null : $user->id; // 用户 ID,未登录则为空
$log->controller = $controller;
$log->action = $action;
$log->ip_address = Yii::$app->request->getUserIP(); // 用户 IP 地址
$log->timestamp = time(); // 当前时间戳
$log->save();
},
];
以上代码会在每个控制器执行动作之前自动被调用。在事件回调函数中,我们获取了当前的控制器 ID、动作 ID、用户对象以及请求的 IP 地址等信息。
然后,我们创建了一个 UserLog 模型实例,并将所需的信息保存到模型的属性中。可以根据需要,自定义 UserLog 模型的表结构和字段。
最后,调用 $log->save()
方法将日志保存到数据库中。
需要注意的是,在实际应用中,我们可能还需要进行一些其他的操作,例如对日志内容进行格式化、加密或者使用缓存技术来提高性能等,具体根据项目需求进行实现。
此外,你可以根据业务需求扩展日志功能,例如记录用户的输入数据、请求参数和响应信息等,或者添加额外的字段来记录其他相关信息。