问题
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