1

我正在尝试实现事件,当用户登录时我必须触发一个事件。

我正在关注此链接 - http://laravel.com/docs/5.1/events#event-subscribers,但是当我登录或注销时没有结果。

public function onUserLogin($event) {
        $user = new User;

        $user->last_login_on = Carbon::now();

        $user->save();
    }

    /**
     * Handle user logout events.
     */
    public function onUserLogout($event) {
        $user = new User;

        $user->last_login_on = Carbon::now();

        $user->save();
    }

这就是subscribe.

public function subscribe($events)
    {
        $events->listen(
            'App\Events\UserLoggedIn',
            'App\Listeners\UserEventListener@onUserLogin'
        );

        $events->listen(
            'App\Events\UserLoggedOut',
            'App\Listeners\UserEventListener@onUserLogout'
        );
    }

虽然,我不知道我应该在这里放什么,App\Events\UserLoggedIn

我在哪里可以触发这个事件?

以及如何使用事件实现此功能?

4

2 回答 2

6

您需要监听的事件是:

  • auth.login - 当用户成功登录时触发
  • auth.logout - 用户注销时触发
  • auth.attempt - 当用户尝试登录时触发

这些是 Laravel 自动触发的事件 - 请参阅Illuminate\Auth\Guard类,这是您使用 Auth外观时得到的。

为了让你的听众工作,你需要做:

$events->listen(
    'auth.login',
    'App\Listeners\UserEventListener@onUserLogin'
);

$events->listen(
    'auth.logout',
    'App\Listeners\UserEventListener@onUserLogout'
);

另一种选择是为两个事件定义单独的处理程序类,例如:

class UserEventLoginHandler {
  public function handle($event) {
    //do some logic here
  }
}

class UserEventLogoutHandler {
  public function handle($event) {
    //do some logic here
  }
}

然后在中定义监听器:

protected $listen = array(
  'auth.login' => 'App\Listeners\UserEventLoginListener',
  'auth.logout' => 'App\Listeners\UserEventLogoutListener'
);

您还可以使用 Laravel 的命令来生成处理程序 -有关详细信息,请参阅https://mattstauffer.co/blog/laravel-5.0-events-and-handlers 。

于 2015-07-06T19:13:18.633 回答
2

我知道这个问题已经很老了,但是如果其他人遇到同样的问题,请回答最后一条评论。您还需要在 onUserLogin 和 onUserLogout 方法中访问当前登录的用户,因为创建用户模型的新实例会创建一个新用户,而不是更新当前登录的用户。

于 2016-04-19T06:20:49.263 回答