Php 如何在Laravel中记录用户操作?如何倾听控制器的方法?
我希望通过在数据库的特定表中记录用户所做的任何操作(用户、时间戳、[控制器和方法名称]或[url和请求方法])来研究用户的行为 这涉及到一个类似的问题,但似乎听了三种方法;我更喜欢一个更全球化的解决方案 以下是我迄今为止所做的尝试: global.phpPhp 如何在Laravel中记录用户操作?如何倾听控制器的方法?,php,laravel,logging,listen,Php,Laravel,Logging,Listen,我希望通过在数据库的特定表中记录用户所做的任何操作(用户、时间戳、[控制器和方法名称]或[url和请求方法])来研究用户的行为 这涉及到一个类似的问题,但似乎听了三种方法;我更喜欢一个更全球化的解决方案 以下是我迄今为止所做的尝试: global.php Event::listen('*', function(){ $action = Event::firing(); App::make('SpyController')->spy($action); }); SpyCon
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?超时错误,我认为是因为您有一个controller LogController而不是SpyController
auth.login、auth.trunt、router.*内置于laravel src中,并与dispatcher一起激发。
因此,如果您需要为控制器创建一个listner,您可以创建一个中间件,它将触发一个包含您想要的内容的事件。
例如:
中间件注册名称-spylogs。
句柄方法(在中间件中):
在控制器中:
$this->middleware('spylogs');
无论您想去哪里:
Event::listen('some_name.method_name', callback);
对不起,那是个打字错误
Log
是一个保留字,我不能将其用作型号名称。因此,为了保持一致,我将log
替换为spy
,并更新了问题。如果我听router.before
,这似乎是第一个事件,脚本工作正常。但是听*
会让它工作太长时间。无论如何,谢谢你;)谢谢我只是查看了文档以了解中间件是什么。Laravel 4.2是否也存在这种情况?我找不到它。。。另外,我是否必须为每个方法添加一些代码以进行监视?我可能有一百个。。。监听每一个动作,然后在注册前按类/控制器名称进行过滤将是理想的。。。
Event::listen('some_name.method_name', callback);