2013-12-09 43 views
0

对于具有许多数据库相关事件的Web应用程序,我想构建一个Changelog。这应该记录用户所做的事情,所以它也是一个用户日志。 该应用程序是巨大的,有一个复杂的基于角色的Useraccess系统,将有数百个不同的事件(变化),他们可能会发生。如何制作更改日志?

这一切都应该由数据库驱动,在PHP中并且至少需要一个View来搜索日志。

但总之,我完全没有想法如何或设计这一切,需要一些提示或启示,也许别人做了什么。

回答

1

我已经完成了这个过去,发现基本上有两种方法:基于模型和基于控制器。

  • 基于模型的模型本身覆盖saveupdate方法(假定ActiveRecord的图案),以在ChangeLog表中的新条目内

  • 基于控制器ChangeLog记录创建逻辑添加到您要跟踪的每个控制器。

我喜欢基于控制器的方法,因为你有过什么事情,当更多的控制。此外,您可以完全访问用户会话,因此为审核目的添加跟踪更加轻松。

+0

好的,基于控制器的声音非常好,检查! 现在如何处理大量的事件,尤其是它们的名称。是否通过外部表使用id是一种好的做法,或者更好地在varchar中多次写入名称或使用某种常量.....? 嗯,在这一点上,我更愿意按照原样编写Change-Event-Names,因为它是最简单的,即使它在数据库中花费更多空间并且看起来有点笨拙。 –

+0

谢谢,我明白了。我受到了一个简单的错误日志的启发,现在写入全部。尽可能简单。 –

0

解决了这个问题,让我的第一个想法看起来更容易。 这应该做到这一点大部分时间没有评论:

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(); 
} 

一个简单的$这个 - >日志()和一切都过去了。

结果:http://charterix.sourceforge.net/log.jpg