2017-07-03 30 views
1

我想爲我的Laravel 5.3應用程序編寫登錄計數器。Laravel 5.3 - 登錄計數器 - 事件和監聽器

後來我想知道有多少用戶登錄,例如10 & 11 PM之間。

我創建了一個名爲logins的列的數據庫。每當用戶登錄我的應用程序時,我都希望在此列中記錄一個事件。

我正在努力與事件&聽衆。

app/Providers/EventServiceProvider我的$listen陣列中創建此:

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

我當時的問題是我嘗試unterstand事件如何&聽衆一起合作。

+0

您的代碼中的某個地方定義該事件發生了。此時將被稱爲與此事件相關的監聽器的功能,如您在服務提供商中所描述的 – omadonex

+2

https://laravel.com/docs/5.3/events – Cary

+1

@Trayer您好我的第二個人,你可以看看在https://laravel.com/docs/5.3/events – Troyer

回答

1

事件&聽者的概念很容易理解。聽衆只是等待事件被解僱的觀察員。他們通過交換數據進行協作。當你創建一個事件時,你爲它提供了所有需要的數據,然後你在每個連接的監聽器中使用它。

在Laravel,要舉辦一個活動,您必須使用event(new YourEvent($data))。讓我們考慮一下你的問題 - 看看有多少用戶在指定的時間內登錄。讓我們用$ user和$ timestamp屬性創建一個LoginEvent。

這樣簡單的類已經足夠了,我們只需要存儲稍後我們將要使用的數據。

因此,現在,在控制器或其他地方,您可以觸發此事件。假設您的AuthController採用了Login方法:

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(); 
     } 
    } 
} 

然後你就完成了。

+0

謝謝!好的答案! – Trayer