如何在Laravel中记录用户操作?如何监听控制器方法?

时间:2015-04-12 16:34:16

标签: php laravel logging listen

我想通过在数据库的特定表中记录用户所做的任何操作(用户,时间戳,[控制器和方法名称]或[url和请求方法])来研究用户行为。

这个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 个答案:

答案 0 :(得分:2)

超时错误我想是因为你有一个控制器LogController而不是SpyController

auth.login,auth.attempt,router。*是建立laravel src并使用调度程序触发。 因此,如果您需要为控制器创建一个列表器,您可以创建一个中间件,它将触发您想要的事件。 例如: 中间件注册名称 - spylogs。 处理方法(在中间件中):

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