Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting changes in the model; php yii framework

I'm creating an audit trail module that i will put in a larger system; and i've created a table to store the trail entries , as an "auditor" what i want to see the currently logged on user, the page where he/she is in, what action he/she did, and what were the changes and when...

these are basically what i want to see; my audit trail table looks like:

User| Timestamp| Module Name| Action| Old Value| New Value| Description

i basically had no problem getting the user, by

Yii::app()->session['username'];

the page/module and action by getting the controller's :

$this->module->getName();
$this->action->id;

My problem lies with the changes old value to new value, the edits done by the user. i could sort of "sniff" out what edits/ changes he/she did by literally copying the variables and passing it through my function where i create the log.. How do i do this dynamically?

i sort of want to detect if a certain model's properties or attributes has been changed and see what changes were made so that i could get a detail log...Thanks ! sorry, i'm really trying hard to explain this.

like image 343
muffin Avatar asked May 22 '13 06:05

muffin


1 Answers

In each model that you want to observe you can write a afterFind() method, where you store the current DB attributes into some private variable, e.b. _dbValues. Then in beforeSave() you verify the current attributes with the ones in _dbValues and create an audit record if there was a change.

After you have this working, you can take it a step further and create a behavior from it. You'd put the private variable, the afterFind() and the beforeSave() method there. Then you can attach that behavior to many records.

like image 93
Michael Härtl Avatar answered Nov 09 '22 02:11

Michael Härtl