Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel中记录用户操作?如何倾听控制器的方法?_Php_Laravel_Logging_Listen - Fatal编程技术网

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

Php 如何在Laravel中记录用户操作?如何倾听控制器的方法?,php,laravel,logging,listen,Php,Laravel,Logging,Listen,我希望通过在数据库的特定表中记录用户所做的任何操作(用户、时间戳、[控制器和方法名称]或[url和请求方法])来研究用户的行为 这涉及到一个类似的问题,但似乎听了三种方法;我更喜欢一个更全球化的解决方案 以下是我迄今为止所做的尝试: global.php Event::listen('*', function(){ $action = Event::firing(); App::make('SpyController')->spy($action); }); SpyCon

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

这涉及到一个类似的问题,但似乎听了三种方法;我更喜欢一个更全球化的解决方案

以下是我迄今为止所做的尝试:

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?

超时错误,我认为是因为您有一个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);