如何创建用户活动日志?

时间:2014-12-06 16:38:15

标签: php mysql logging laravel laravel-4

我的目标是在用户更新usernameemail时跟踪活动日志。

我的数据库中有users表,如下所示:

  • ID
  • 用户名
  • 电子邮件

我决定创建一个包含以下内容的logs表:

  • 用户名
  • username_new
  • 电子邮件
  • email_new
  • created_at
  • USER_ID

在进行了大量研究后,有人建议我使用Event::fireEvent::listen

所以......我现在一次又一次地看着this

我明白了。

对于用户执行的每个操作都应触发事件。


$event = Event::fire(‘user.log’, array($user));

Event::listen(‘user.log’, function($user)
{

$log->username = $user->username;
$log->username_new = Input::get(‘username’);
$log->email = $user->email;
$log->email_new = Input::get(‘email’);
$log->created_at = Input::get('created_at');
$log->user_id = $user->id;

$log->save();

});

我知道我把这些代码放进去了 app/start/global.phpapp/events.php

好吧,我是NEW到Laravel。但我相信,“每个艺术家曾经是一个业余爱好者” - 对吗?

我不确定我的方法是否有效。但我希望有人可以指出我做了什么完全错误,或者可能忘了什么。

我在做什么在逻辑上是有道理的?

对所有在这个问题上做出贡献的人thanks

1 个答案:

答案 0 :(得分:0)

不是您问题的真实答案(您似乎自己已经回答了),但是:您可能想要考虑更通用的解决方案。例如,假设您有一个像这样的对象User

User {
    protected $email;
    protected $username;
    protected $name;
}

当用户触发保存时,您触发事件user.change($oldUser, $newUser),正如参数名称所示,该事件在更改之前和之后传播用户状态。你可以通过以下方式处理它:

Event::listen('user.change', function($oldUser, $newUser) {
    // you could do a recursive diff here
    $diff = array_diff((array) $newUser, (array) $oldUser);

    // diff here contains only the changes made in that request
    // if you add more properties to user, they will work too
    // as there might be one or more properties in the diff, a non-prescribed columns
    // storage such as MongoDB might be a best choice
}

以任何方式思考的食物,HTH。