2013-12-09 48 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