我想通过在数据库的特定表中记录用户所做的任何操作(用户,时间戳,[控制器和方法名称]或[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
?
答案 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);