Die nachfolgend genannten Codes sind z.T. verkürzt, da sie bei mir tatsächlich etwas anders aufgebaut sind (weitere Funktionen die hier nicht zur Sache tun).
Im AppController nütze ich den Callback beforeRender. Hier ist anzumerken, dass ich die Authake-Komponente für die User-Verwaltung verwende. Ich denke das kann jeder auf seine Anwendung übetragen:
- Code: Alles auswählen
- class AppController extends Controller {
var $components = array('Session', 'RequestHandler', 'Tracking');
var $helpers = array('Html', 'Form');
function beforeRender(){
// nur aufzeichnen, wenn der User eingeloggt ist
if($this->Session->read('Authake.login')) {
$savedata = array('session' => $this->Session->id(),
'ipaddress' => $this->RequestHandler->getClientIP(),
'url' => $this->here,
'user' => $this->Session->read('Authake.login'));
$this->Tracking->saveTracking($savedata);
}
}
Die Funktion saveData ist in der Komponente Tracking definiert:
- Code: Alles auswählen
- class TrackingComponent extends Object {
function saveTracking($data) {
App::import('Model', 'tracking');
$this->Tracking = new Tracking();
$this->Tracking->save($data);
}
}
o.k. das Modell Tracking ist im Moment ziemlich blank:
- Code: Alles auswählen
- class Tracking extends AppModel {
}
Die Tabellendefinition sieht wie folgt aus:
- Code: Alles auswählen
- CREATE TABLE IF NOT EXISTS `trackings` (
`id` int(11) NOT NULL auto_increment,
`session` varchar(255) collate utf8_unicode_ci NOT NULL,
`ipaddress` varchar(15) collate utf8_unicode_ci NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`url` varchar(255) collate utf8_unicode_ci default NULL,
`user` varchar(50) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Wie man sieht, funktioniert das auch ganz gut.
Ciao Thomas