我正在尝试记录每次写入操作,因此我在AppModel中使用了afterSave和afterDelete回调。基本上我需要记录(暂时):模型,控制器功能,登录用户数据和远程ip 似乎我能够得到所有这些,但我不知道如何获得控制器功能名称。 这是我现在的aftersave功能:
public function afterSave($created) {
App::uses('Folder', 'Utility');
$month = date("y-m");
if(!is_dir('../tmp/logs/'.$month)) {
$dir = new Folder('../tmp/logs/'.$month, true);
}
App::uses('CakeSession', 'Model/Datasource');
$user_id = CakeSession::read('Auth.User.username');
if($created) {
$id = 'New';
} else {
$id = $this->data[$this->alias]['id'];
}
$str = 'WRITE Action. Model: '.$this->alias.'. Controller: functon_name. ID:'.$id.'. Username: '.$user_id.'. Client IP: '.$this->getIP();
CakeLog::write($month.'/'.date("d-m-y"), $str);
}
由于
答案 0 :(得分:2)
你在模型上做这个,它不知道控制器(实际上不应该)。我建议将CakeRequest
对象复制到模型中,以便获得该信息。这是一种方式:
//controller
function beforeFilter() {
$this->{$this->modelClass}->request = $this->request;
}
然后您可以从模型中访问请求对象。使用$this->request['params']['action']
获取当前调度的操作。
值得建议的是,您可能希望将其移至自定义数据源上的read()
方法,因为afterSave()
可能会被跳过,因此无法记录。