0

私はすべての書き込み操作をログに記録しようとしているので、AppModelでafterSaveおよびafterDeleteコールバックを使用しています。基本的に(今のところ)ログに記録する必要があります:モデル、コントローラー関数、ログインしたユーザーデータ、リモートIPすべてを取得できたようですが、コントローラー関数名を取得する方法がわかりません。これは私が今持っているアフターセーブ機能です:

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);
}

ありがとう

4

1 に答える 1

2

これは、コントローラーの知識がない(実際にはそうすべきではない)モデルで実行しています。CakeRequestオブジェクトをモデルにコピーして、その情報を入手することをお勧めします。これが1つの方法です:

//controller
function beforeFilter() {
  $this->{$this->modelClass}->request = $this->request;
}

次に、モデルからリクエストオブジェクトにアクセスできます。$this->request['params']['action']現在ディスパッチされたアクションを取得するために使用します。

スキップされてログに記録されない可能性があるため、これをread()カスタムデータソースのメソッドに移動することをお勧めします。afterSave()

于 2012-04-16T16:53:45.760 に答える