对于具有许多数据库相关事件的Web应用程序,我想构建一个Changelog。这应该记录用户所做的事情,所以它也是一个用户日志。 该应用程序是巨大的,有一个复杂的基于角色的Useraccess系统,将有数百个不同的事件(变化),他们可能会发生。如何制作更改日志?
这一切都应该由数据库驱动,在PHP中并且至少需要一个View来搜索日志。
但总之,我完全没有想法如何或设计这一切,需要一些提示或启示,也许别人做了什么。
对于具有许多数据库相关事件的Web应用程序,我想构建一个Changelog。这应该记录用户所做的事情,所以它也是一个用户日志。 该应用程序是巨大的,有一个复杂的基于角色的Useraccess系统,将有数百个不同的事件(变化),他们可能会发生。如何制作更改日志?
这一切都应该由数据库驱动,在PHP中并且至少需要一个View来搜索日志。
但总之,我完全没有想法如何或设计这一切,需要一些提示或启示,也许别人做了什么。
我已经完成了这个过去,发现基本上有两种方法:基于模型和基于控制器。
基于模型的模型本身覆盖save
和update
方法(假定ActiveRecord的图案),以在ChangeLog
表中的新条目内。
基于控制器将ChangeLog
记录创建逻辑添加到您要跟踪的每个控制器。
我喜欢基于控制器的方法,因为你有过什么事情,当更多的控制。此外,您可以完全访问用户会话,因此为审核目的添加跟踪更加轻松。
解决了这个问题,让我的第一个想法看起来更容易。 这应该做到这一点大部分时间没有评论:
protected function log($comment = ''){
$user = $this->user();
ORM::factory('Changelog')->vaules(array(
'user_id' => $user->pk(),
'section_id' => $user->section->pk(),
'username' => $user->username.'@'.$user->section->name,
'time' => time(),
'uri' => $this->uri($this->request->param(), $this->request->query()),
'controller' => $this->request->controller(),
'action' => $this->request->action(),
'post' => serialize($this->request->post()),
'comment' => $comment,
))->save();
}
一个简单的$这个 - >日志()和一切都过去了。
好的,基于控制器的声音非常好,检查! 现在如何处理大量的事件,尤其是它们的名称。是否通过外部表使用id是一种好的做法,或者更好地在varchar中多次写入名称或使用某种常量.....? 嗯,在这一点上,我更愿意按照原样编写Change-Event-Names,因为它是最简单的,即使它在数据库中花费更多空间并且看起来有点笨拙。 –
谢谢,我明白了。我受到了一个简单的错误日志的启发,现在写入全部。尽可能简单。 –