2015-04-12 35 views
1

我想通過在數據庫的特定表中記錄用戶所做的任何操作(用戶,時間戳,[控制器和方法名稱]或[URL和請求方法])來研究用戶行爲。如何在Laravel中記錄用戶操作?如何聆聽控制器方法?

thread處理類似的問題,但它似乎是聽三種方法;我寧願選擇更全面的解決方案。

所以,這裏是我試過到目前爲止:

global.php

Event::listen('*', function(){ 
    $action = Event::firing(); 
    App::make('SpyController')->spy($action); 
}); 

SpyController.php

class SpyController extends BaseController { 
    public function spy($action){ 
     $spy = new Spy(); 
     $spy->name=$action; 
     $spy->user_id=Auth::user()->id; 
     $spy->save(); 
    } 
} 

這樣做,我得到一個超時錯誤。我想有太多東西可以聽,而且我應該更好地限制選擇控制器。但是,我不明白如何聆聽特定的控制器。該文檔以auth.login爲例。如果我說得對,這代表model.method。是否有可能收聽controller.method

回答

1

超時錯誤我想是因爲你有一個控制器LogController代替SpyController

auth.login,auth.attempt,路由器。*是builti,在laravel src和與調度火災。 因此,如果您需要爲控制器創建一個列表器,您可以創建一箇中間件,它將使用您想要的東西觸發一個事件。例如: 中間件註冊名稱 - spylogs。 handle方法(中間件):

public function handle($request, Closure $next) 
    { 
     $method = $request->method(); 
     Event::fire('some_name.'.$method); 
     return $next($request); 
    } 

在控制器:

$this->middleware('spylogs'); 

不管你想要:

Event::listen('some_name.method_name', callback); 
+0

Oups,對不起,這是一個錯字。 'Log'是一個保留字,我不能用它作爲模型名稱。因此,爲了保持一致,我用'spy'替換了'log',並且更新了這個問題。如果我聽着似乎是第一個事件的'router.before',那麼腳本工作正常。但是聽'*'會使它工作太久。無論如何,謝謝;) – Yako

+0

我糾正了我的答案:)現在嘗試) – mcklayin

+0

謝謝。我剛剛查看了文檔以瞭解中間件是什麼。這對Laravel 4.2是否也存在?我找不到它...另外,我是否需要爲每種方法添加一些代碼來監控?我可能有一百個......聽取每一個動作,然後在註冊之前通過類/控制器名稱過濾將是理想的... – Yako

相關問題