Laravel 5.2登录的EventServiceProvider映射 [英] EventServiceProvider mapping for Laravel 5.2 login

查看:244
本文介绍了Laravel 5.2登录的EventServiceProvider映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

我有app/Listeners/UpdateLastLoginOnLogin.php.

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

在app/Providers/EventServiceProvider中:

And in app/Providers/EventServiceProvider:

命名空间App \ Providers;

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

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

I have the followings in app/User.php

protected $dates = ['last_login_at'];

在我的app/Http/Controllers/Admin/DashboardController.php中

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

它可以在Laravel 5.1中运行,但不能在Laravel 5.2.8中运行.我认为问题在于EventServiceProvider 'auth.login' => ['App\Listeners\UpdateLastLoginOnLogin',]中的映射.我尝试使用loginAuth::login()代替auth.login,但是它们也不起作用.

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.

如何映射protcted $listen?

推荐答案

根据升级指南,某些事件在5.2中已更改:

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

"Laravel触发的某些核心事件现在使用事件对象,而不是字符串事件名称和动态参数." -Laravel 5.2升级指南

"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文档-5.2升级指南

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

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

这篇关于Laravel 5.2登录的EventServiceProvider映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆