我想通过在数据库的特定表中记录用户所做的任何操作(用户、时间戳、[ Controller 和方法名称]或[url 和请求方法])来研究用户行为。
这个thread处理类似的问题,但似乎正在听三种方法;我更喜欢更全局化的解决方案。
所以,这是我迄今为止尝试过的:
全局.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();
}
}
这样做时,我收到超时错误。我想有太多的东西要听,我应该更好地限制 Controller 的选择。但是,我不明白如何监听特定 Controller 。该文档提供了一个使用 auth.login
的示例。如果我没猜错的话,这代表 model.method
。是否可以监听controller.method
?
最佳答案
我认为超时错误是因为你有一个 Controller LogController 而不是 SpyController
auth.login、auth.attempt、router.* 是内置的 Laravel src,并通过调度程序触发。 因此,如果您需要为 Controller 创建一个监听器,您可以创建一个中间件,它将用您想要的任何东西触发一个事件。 例如: 中间件注册名称-spylogs。 处理方法(在中间件中):
public function handle($request, Closure $next)
{
$method = $request->method();
Event::fire('some_name.'.$method);
return $next($request);
}
在 Controller 中:
$this->middleware('spylogs');
无论你想去哪里:
Event::listen('some_name.method_name', callback);
关于php - 如何在 Laravel 中记录用户操作?如何监听 Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591776/