Laravel 5.2登录的EventServiceProvider映射

时间:2016-01-24 09:38:39

标签: php laravel-5.2

当用户登录Laravel 5.2时,我正在尝试更新用户的last_login_at。我使用了php artisan make:auth

我有app / Listeners / UpdateLastLoginOnLogin.php。

namespace App\Listeners;

use Carbon\Carbon;

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

        $user->save();
    }
}

在app / Providers / EventServiceProvider中:

命名空间App \ Providers;

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)
    { 
      ...

我在app / User.php中有以下内容

protected $dates = ['last_login_at'];

在我的app / Http / Controllers / 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',]。我尝试了loginAuth::login()而不是auth.login,但他们也没有用。

如何映射protcted $listen

1 个答案:

答案 0 :(得分: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

handle方法现在将事件作为其参数

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

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