我想计算一个用户使用Laravel中的Events登录了多少次。
我已经定义了这个事件:
<?php namespace App'Handlers'Events;
use Illuminate'Queue'InteractsWithQueue;
use Illuminate'Contracts'Queue'ShouldBeQueued;
use App'User;
use Illuminate'Support'Facades'Log;
class AuthLoginEventHandler {
/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param User $user
* @param $remember
* @return void
*/
public function handle(User $user, $remember)
{
Log::info('Logged in');
$user->login_counter = 1;
$user->save();
$user->increment('login_counter');
}
}
和在EventServiceProvider中我有以下内容:
<?php namespace App'Providers;
use Illuminate'Contracts'Events'Dispatcher as DispatcherContract;
use Illuminate'Foundation'Support'Providers'EventServiceProvider as ServiceProvider;
use Illuminate'Support'Facades'Event;
use Illuminate'Support'Facades'Log;
class EventServiceProvider extends ServiceProvider {
/**
* The event handler mappings for the application.
*
* @var array
*/
protected $listen = [
'auth.login' => [
'App'Handlers'Events'AuthLoginEventHandler'
]
];
/**
* Register any other events for your application.
*
* @param 'Illuminate'Contracts'Events'Dispatcher $events
* @return void
*/
public function boot(DispatcherContract $events)
{
parent::boot($events);
//
}
}
更新:我已经覆盖了从trait到AuthController的postLogin():
<?php namespace App'Http'Controllers'Auth;
use App'Http'Controllers'Controller;
use Illuminate'Contracts'Auth'Guard;
use Illuminate'Contracts'Auth'Registrar;
use Illuminate'Foundation'Auth'AuthenticatesAndRegistersUsers;
class AuthController extends Controller {
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @param 'Illuminate'Contracts'Auth'Guard $auth
* @param 'Illuminate'Contracts'Auth'Registrar $registrar
* @return void
*/
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
public function postLogin(Request $request)
{
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $request->only('email', 'password');
if ($this->auth->attempt($credentials, $request->has('remember')))
{
Log::info('Logged in User from AuthController');
return redirect()->intended($this->redirectPath());
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
}
这在我的Laravel 5.0上不起作用,我不知道为什么,除了使用事件之外,还有其他的方法来计算用户的登录吗?
我正在检查日志,当我尝试Log::info('Logged in')时,没有任何东西进来;在boot方法中,它涉及到日志。
首先,由于您在Provider中添加了一些内容,因此需要清除先前编译的源代码(缓存以加快加载时间)。
$ php artisan clear-compiled
其次,你的代码有计数问题,
$user->login_counter = 1; <-- set count to 1 ??
$user->save(); <--- then SAVE?
$user->increment('login_counter'); <--- INCREMENT for what?
应该是这样的
$user->login_counter += 1;
$user->save();
确保在迁移中您拥有login_counter
的默认(初始)值
$table->integer('login_counter')->unsigned()->default(0);
然后它就工作了!