我的目标是在用户更新username
或email
时跟踪活动日志。
我的数据库中有users
表,如下所示:
我决定创建一个包含以下内容的logs
表:
在进行了大量研究后,有人建议我使用Event::fire
和Event::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.php
或app/events.php
。
好吧,我是NEW
到Laravel。但我相信,“每个艺术家曾经是一个业余爱好者” - 对吗?
我不确定我的方法是否有效。但我希望有人可以指出我做了什么完全错误,或者可能忘了什么。
我在做什么在逻辑上是有道理的?
对所有在这个问题上做出贡献的人thanks
!
答案 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。