我想为Laravel 5.3应用程序编写一个登录计数器。
后来我想知道有多少用户登录例如10&晚上11点。
我创建了一个名为logins
的数据库。每当用户登录我的应用程序时,我希望此列中的事件计数。
我现在正在努力与事件& amp;听众。
在app/Providers/EventServiceProvider
我在$listen
数组中创建它:
protected $listen = [
'App\Events\LoginCount' => [
'App\Listeners\LoginCount'
],
我目前的问题是我试图了解事件和事件的方式。听众合作。
答案 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();
}
}
}
你已经完成了。