2016-01-24 58 views
0

当用户在Laravel 5.2上登录时,我试图更新用户的last_login_at。我用php artisan make:authLaravel 5.2的EventServiceProvider映射登录

我有应用程序/监听器/ UpdateLastLoginOnLogin.php。

namespace App\Listeners; 

use Carbon\Carbon; 

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

     $user->save(); 
    } 
} 

而且在app /供应商/ EventServiceProvider:

命名空间应用\供应商;

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 /控制器/管理/ 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',]。我试过loginAuth::login()而不是auth.login,但他们也没有工作。

如何映射protcted $listen

回答

2

有些活动已经在5.2改为按升级指南:

“有些通过Laravel射击现在使用事件的核心事件的对象,而不是字符串事件名称和动态参数。” - Laravel 5.2升级指南

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行错误:调用未定义的方法Illuminate \ Auth \ Events \ Login :: save() – shin

+0

您打电话保存事件?也许你的意思是在模型上做到这一点? – lagbox

+0

嗯,我只想在用户登录时更新用户的last_login_at。 – shin