EventServiceProvider mapping for Laravel 5.2 login

狂风中的少年 提交于 2020-01-06 21:26:12

问题


I am trying to update user's last_login_at when a user login on Laravel 5.2. I used php artisan make:auth.

I have 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();
    }
}

And in app/Providers/EventServiceProvider:

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

I have the followings in app/User.php

protected $dates = ['last_login_at'];

And in my 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'));
    }
}

It was working in Laravel 5.1 but it doesn't in Laravel 5.2.8. I think the problem is mapping in EventServiceProvider, 'auth.login' => ['App\Listeners\UpdateLastLoginOnLogin',]. I tried login and Auth::login() instead of auth.login but they didn't work either.

How can I map protcted $listen?


回答1:


Some Events have changed in 5.2 as per the upgrade guide:

"Some of the core events fired by Laravel now use event objects instead of string event names and dynamic parameters." - 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

The handle method will now be taking the event as its argument

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

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


来源:https://stackoverflow.com/questions/34974192/eventserviceprovider-mapping-for-laravel-5-2-login

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!