2016-01-24 4 views
0

Я пытаюсь обновить пользовательский номер last_login_at при входе пользователя в систему на Laravel 5.2. Я использовал php artisan make:auth.Отображение EventServiceProvider для Laravel 5.2 login

У меня есть приложение/Слушатели/UpdateLastLoginOnLogin.php.

namespace App\Listeners; 

use Carbon\Carbon; 

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

     $user->save(); 
    } 
} 

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

пространства имен App \ поставщиков;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; 
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 

class EventServiceProvider extends ServiceProvider 
{ 
    /** 
    * The event listener mappings for the application. 
    * 
    * @var array 
    */ 
    protected $listen = [ 
     'auth.login' => [ 
      'App\Listeners\UpdateLastLoginOnLogin', 
     ], 
    ]; 
    /** 
    * Register any other events for your application. 
    * 
    * @param \Illuminate\Contracts\Events\Dispatcher $events 
    * @return void 
    */ 
    public function boot(DispatcherContract $events) 
    { 
     ... 

У меня есть следующее в приложении/User.php

protected $dates = ['last_login_at']; 

И в моем приложении/Http/Контроллеры/Admin/DashboardController.php

namespace App\Http\Controllers\Admin; 

use App\Blog; 
use App\User; 
use App\Http\Controllers\Controller; 

class DashboardController extends Controller 
{ 
    public function index(Blog $blogs, User $users) 
    { 
     $blogs = $blogs->orderBy('updated_at', 'desc')->take(5)->get(); 

     $users = $users->whereNotNull('last_login_at')->orderBy('last_login_at', 'desc')->take(5)->get(); 

     return view('admin.dashboard', compact('blogs','users')); 
    } 
} 

Он работал в Laravel 5.1, но это не относится к Laravel 5.2.8. Я думаю, что проблема заключается в сопоставлении в EventServiceProvider, 'auth.login' => ['App\Listeners\UpdateLastLoginOnLogin',]. Я пробовал login и Auth::login() вместо auth.login, но они тоже не работали.

Как я могу отобразить protcted $listen?

ответ

2

Некоторые события изменились в 5.2, согласно руководства по обновлению:

«Некоторые из основных событий, выпущенными Laravel теперь используют объекты события вместо имен событий строк и динамических параметров.» - Laravel 5.2 Upgrade Guide

OLD    NEW 
auth.attempting Illuminate\Auth\Events\Attempting 
auth.login  Illuminate\Auth\Events\Login 
auth.logout  Illuminate\Auth\Events\Logout 

Laravel Docs - 5.2 Upgrade Guide

Метод ручки теперь будет принимать событие в качестве аргумента

... 
use Illuminate\Auth\Events\Login; 

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

Я получаю ошибку FatalErrorException в UpdateLastLoginOnLogin.php строке 14: Вызовите undefined метод Illuminate \ Auth \ Events \ Login :: save() – shin

+0

вы вызываете сохранение в событии? возможно, вы хотите сделать это на модели? – lagbox

+0

Ну, я просто хочу обновить user_login_at пользователя при входе пользователя. – shin

Смежные вопросы