Laravel 5.2登录的EventServiceProvider映射 [英] EventServiceProvider mapping for Laravel 5.2 login
问题描述
当用户登录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',]
中的映射.我尝试使用login
和Auth::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
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屋!