В базе данных у меня есть пользователи таблицы с столбцом last_login_at. Каждый раз, когда какой-то пользователь входит в систему, я хочу перевернуть last_login_at .
Итак, я создал приложение / Listeners / 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 для входа в Laravel 5.2, но без решения. Я попытался сделать так:
…
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 clear-compiled не решила проблему.
EDIT: ДЛЯ ДРУГИХ ДЕТАЛЕЙ, ЗДЕСЬ СВЯЗЬ С ПРОЕКТОМ, который на самом деле точно такой же (это делается точно так же): https://github.com/tutsplus/build-a-cms-with-laravel
Вы почти там, всего несколько изменений, события и прослушиватели для аутентификации немного изменились в Laravel 5.2: метод handle в 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\UpdateLastLoginOnLogin@handle', ], ];