Laravel 5.3 - 登录柜台 - 活动&听众

时间:2017-07-03 09:06:12

标签: php laravel

我想为Laravel 5.3应用程序编写一个登录计数器。

后来我想知道有多少用户登录例如10&晚上11点。

我创建了一个名为logins的数据库。每当用户登录我的应用程序时,我希望此列中的事件计数。

我现在正在努力与事件& amp;听众。

app/Providers/EventServiceProvider我在$listen数组中创建它:

protected $listen = [ 
            'App\Events\LoginCount' => [ 
                    'App\Listeners\LoginCount'
            ],

我目前的问题是我试图了解事件和事件的方式。听众合作。

1 个答案:

答案 0 :(得分:1)

活动&听众概念很容易掌握。听众只是观察者等待事件被解雇。他们通过交换数据进行协作。创建事件时,您可以为其提供所有需要的数据,然后在每个连接的侦听器中使用它。

在Laravel中,要发起事件,您必须使用event(new YourEvent($data))。让我们考虑一下您的问题 - 观察指定时间内有多少用户登录。让我们创建一个带有$ user和$ timestamp属性的LoginEvent。

class LoginEvent {
    public $user;
    public $logged_at;

    public function __construct(User $user, Carbon $logged_at) { ... }
}

这样简单的类就足够了,我们想要的只是存储稍后会消耗的数据。

现在,在控制器或其他地方你可以发起这个事件。假设你有使用Login方法的AuthController:

public function login() 
{
   // login implementation...
   $user = // logged user;
   $logged_at = Carbon::now();

   event(new LoginEvent($user, $logged_at));
}

在EventServiceProvider中的LoginEvent中附加了CountLoginsListener。假设这样的事情:

class CountLoginsListener {

    public function handle(LoginEvent $event) 
    {
        if ($this->isHourBetweenSpecifiedPeriod($event)) {
            $login_log = new LoginLog;
            $login_log->user()->associate($event->user);
            $login_log->logged_at = $event->logged_at;
            $login_log->save();
        }
    }
}

你已经完成了。