2016-02-09 2 views
2

В базе данных у меня есть таблица пользователей с колонкой last_login_at. Каждый раз, когда какой-то пользователь входит в систему, я хочу перевернуть last_login_at.Laravel 5.2 Вход в систему Управление событиями

Итак, я создал приложение/Слушатель/UpdateLastLoginOnLogin.php:

namespace App\Listeners; 

use Carbon\Carbon; 

class UpdateLastLoginOnLogin 
{ 
    public function handle($user, $remember) 
    { 
     $user->last_login_at = Carbon::now(); 

     $user->save(); 
    } 
} 

В приложении/Провайдеры/EventServiceProvider:

protected $listen = [ 
     'auth.login' => [ 
      'App\Listeners\UpdateLastLoginOnLogin', 
     ], 
    ]; 

НО это не работает, событие не обрабатываются , Та же проблема уже упоминалась здесь: EventServiceProvider mapping for Laravel 5.2 login, но без решения. Я пытался сделать так:

...

use Illuminate\Auth\Events\Login; 

class UpdateLastLoginOnLogin 
{ 
    public function handle(Login $event) 
    { 
     $event->user->last_login_at = Carbon::now(); 
     $event->user->save(); 
    } 
} 

и:

protected $listen = [ 
    'Illuminate\Auth\Events\Login' => [ 
     'App\Listeners\UpdateLastLoginOnLogin', 
    ], 
]; 

Но это не работает.

Кроме того, я проверил это: https://laracasts.com/discuss/channels/general-discussion/login-event-handling-in-laravel-5, но php artiasn с ясной компиляцией не решила проблему.

EDIT: Для других деталей, здесь ссылка на проект, который на самом деле точно такой же (это делается точно так же): https://github.com/tutsplus/build-a-cms-with-laravel

+0

Как вы войти пользователей в? –

+0

@noodles_ftw Вот ссылка на проект, который на самом деле точно такой же (это делается точно так же): https://github.com/tutsplus/build-a-cms-with-laravel – PeraMika

+0

Вы уволили его себя откуда угодно? –

ответ

11

Вы почти там, всего лишь несколько изменений более, События и Слушатели для аутентификации изменились немного в Laravel 5.2: метод ручки в UpdateLastLoginOnLogin должен иметь только событие в качестве параметра

namespace App\Listeners; 

use Carbon\Carbon; 
use Auth; 

class UpdateLastLoginOnLogin 
{ 
    public function handle($event) 
    { 
     $user = Auth::user(); 
     $user->last_login_at = Carbon::now(); 
     $user->save(); 
    } 
} 

и для EventServiceProvider вы задаете слушателей, как это:

protected $listen = [ 
    'Illuminate\Auth\Events\Login' => [ 
     'App\Listeners\[email protected]', 
    ], 
]; 
+0

У меня есть вопрос, у нас есть несколько событий для прослушивания, тогда мы должны писать каждый раз, когда разные слушатели в EventServiceProvider? – Hola

+0

Если события независимы, логически вам нужен слушатель для каждого события. как вы видели ниже, слушатель может быть в другом классе, поэтому вы просто активируете его в EventServiceProvider по указанному событию. – bedoui

+0

Работал для меня .. отлично! благодаря – Poria