当用户登录Laravel时触发事件

nir*_*air 1 php laravel laravel-5 laravel-5.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();
    }
Run Code Online (Sandbox Code Playgroud)

这就是subscribe.

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

        $events->listen(
            'App\Events\UserLoggedOut',
            'App\Listeners\UserEventListener@onUserLogout'
        );
    }
Run Code Online (Sandbox Code Playgroud)

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

我可以在哪里开火这个活动?

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

jed*_*ylo 5

您需要倾听的事件包括:

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

这些是Laravel自动触发的事件 - 请参阅Illuminate\Auth\Guard类,这是您使用Auth facade 时获得的 .

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

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

$events->listen(
    'auth.logout',
    'App\Listeners\UserEventListener@onUserLogout'
);
Run Code Online (Sandbox Code Playgroud)

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

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

class UserEventLogoutHandler {
  public function handle($event) {
    //do some logic here
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在以下位置定义侦听器:

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

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