【问题标题】:How to log users actions in Laravel? How to listen to controllers methods?如何在 Laravel 中记录用户操作?如何监听控制器方法?
【发布时间】:2015-06-17 23:07:45
【问题描述】:

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

【问题讨论】:

    标签: php laravel logging listen


    【解决方案1】:

    我认为超时错误是因为你有一个控制器 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);
    

    【讨论】:

    • 哎呀,对不起,这是一个错字。 Log 是保留字,我不能用它作为型号名称。因此,为了保持一致,我在各处替换了logby spy,并更新了问题。如果我听router.before 这似乎是第一个事件,则脚本可以正常工作。但是听* 会让它工作太久。无论如何谢谢;)
    • 谢谢。我刚刚检查了文档以了解中间件是什么。 Laravel 4.2 也存在这种情况吗?我找不到它......另外,我是否必须在每个方法中添加一些代码来监控?我可能有一百个......听每一个动作,然后在注册之前按类/控制器名称过滤是理想的......
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多