2013-12-09 10 views
0

Для веб-приложения со многими событиями, связанными с базой данных Я хочу создать Changelog. Это должно регистрировать то, что сделали пользователи, так что это также Userlog. Приложение огромно, имеет сложную основанную на ролях систему Useraccess System, и там будут сотни различных событий (изменений), которые могут произойти.Как сделать Changelog?

Это все должно быть основано на базе данных, в PHP и нуждается хотя бы в представлении для поиска в журналах.

Но, короче говоря, у меня нет абсолютно никакой идеи, как и для проектирования, и все, что нужно, и нуждаются в советах или вдохновениях, возможно, что другие сделали.

ответ

1

Я сделал это в прошлом и нашел в основном 2 подхода: основан на модели и на основе контроллера.

  • Модель на основе в рамках модели сам по себе переопределять save и update методы (предполагая ActiveRecord шаблона), чтобы создать новую запись в таблице ChangeLog.

  • На основе контроллера добавьте логику создания записи к каждому контроллеру, который вы хотите отслеживать.

Я предпочитаю контроллер на основе подход, поскольку у вас есть больше контроля над тем, что происходит и когда. Кроме того, у вас есть полный доступ к сеансу пользователя, поэтому проще добавить отслеживание для целей аудита.

+0

OK, звуки контроллера на основе очень хорошо, проверено! Теперь, как обрабатывать огромное количество событий, особенно их имен. Является ли хорошей практикой использовать идентификаторы через внешнюю таблицу или лучше писать имена в 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(); 
} 

Простой $ this-> (Журнал), и все это делается.

Результат: http://charterix.sourceforge.net/log.jpg