php - 如何在 Laravel 中记录用户操作?如何监听 Controller 方法?

标签 php laravel logging listen

我想通过在数据库的特定表中记录用户所做的任何操作(用户、时间戳、[ 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/

相关文章:

javascript - 使用 WP-pagenavi 和 AJAX 的 WordPress 页面导航

linux - 如何将多个正在运行的 ping 线程反馈/结果保存到每个相关文件输出?

php - 来自远程文件的 SQL 注入(inject)

php - 将表单字段设置为有条件只读 (PHP)

php - Laravel/MYSQL (Eloquent) - 查询大表

php - Laravel 5 Redirect::to 带有多个参数

php - 使用 Algolia 搜索自定义查询结果集合 - Laravel

java - 在独立模式下运行 JBOSS EAP6 时没有 Eclipse 控制台输出

java - Spring Boot 和日志记录

PHP - 将数据导入 excel 模板