對於具有許多數據庫相關事件的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,因爲它是最簡單的,即使它在數據庫中花費更多空間並且看起來有點笨拙。 –
謝謝,我明白了。我受到了一個簡單的錯誤日誌的啓發,現在寫入全部。儘可能簡單。 –