jon*_*tyo 35 php laravel laravel-4
我知道有自动插入的字段(例如updated_at和created_at)但我想知道是否有类似Eloquent 方法的时间戳()或Laravel方式来生成时间戳?
例如,我希望每次用户登录系统并将其存储到数据库时记录时间戳,这样我们就可以看到每个用户的上次登录日期和时间详细信息.
Dan*_*n H 71
在Laravel 5.2+(也在5.6上测试)过程略有不同.首先,将您的监听器添加到EventServiceProvider:
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
];
Run Code Online (Sandbox Code Playgroud)
然后做:
php artisan event:generate
Run Code Online (Sandbox Code Playgroud)
这将在app/Listeners中创建一个新的监听器.现在编辑您的Listener以触摸users表中last_login列中的日期:
public function handle(Login $event)
{
$event->user->last_login = date('Y-m-d H:i:s');
$event->user->save();
}
Run Code Online (Sandbox Code Playgroud)
确保Artisan创建的监听器在顶部具有正确的命名空间.对于这种特殊情况,监听器中的正确名称空间应为:
use Illuminate\Auth\Events\Login;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
Run Code Online (Sandbox Code Playgroud)
Jef*_*ert 28
您可以观察auth.login事件并更新用户的上次登录时间.请参阅文档中的第一个示例,了解要完成您要执行的操作的事件.
Event::listen('auth.login', function($user) {
$user->last_login = new DateTime;
$user->save();
});
Run Code Online (Sandbox Code Playgroud)
注意:在4.0中,事件名称为user.login.在4.1中,事件名称是auth.login
这取决于你放置事件监听器的位置.如果您阅读链接到doc页面,它会指出:
所以,你知道如何注册事件,但你可能想知道在哪里注册它们.别担心,这是一个常见的问题.不幸的是,这是一个很难回答的问题,因为你几乎可以在任何地方注册活动!但是,这里有一些提示.同样,与大多数其他引导代码一样,您可以在一个启动文件中注册事件,例如app/start/global.php.
如果您的启动文件过于拥挤,您可以创建一个单独的app/events.php文件,该文件包含在启动文件中.这是一个简单的解决方案,可以使您的事件注册与其他引导保持完全分离.如果您更喜欢基于类的方法,则可以在服务提供商中注册您的活动.由于这些方法都不具备"正确",因此请根据应用程序的大小选择您认为合适的方法.
我个人的偏好是在服务提供商中注册它们,因为这会使它们被隔离,而对我而言,更像是"Laravel"的做事方式.如果您需要有关服务提供商的帮助,请参阅此文档条目.
但是,如果你真的想要尽可能快地获得并运行,那么你可以很容易地注册那个监听器. app/start/global.php
jor*_*jor 12
我有一个类似的问题.如果您认为不需要使用事件,则可以在对用户进行身份验证后更新时间戳.我将以下代码放在我的控制器方法中,该方法处理用户身份验证.
if (Auth::attempt(array('email'=>$email, 'password'=>$password))) {
Auth::user()->last_login = new DateTime();
Auth::user()->save();
return Redirect::intended('/');
} else {
return Redirect::to('account/login');
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很重要.
Raf*_*ier 12
只需将以下代码添加到App\Http\Controllers\Auth\LoginController.php即可
在控制器的顶部:
use Carbon\Carbon;
use Illuminate\Http\Request;
Run Code Online (Sandbox Code Playgroud)
在你的控制器里面放下这个功能:
public function authenticated(Request $request, $user) {
$user->last_login = Carbon::now()->toDateTimeString();
$user->save();
}
Run Code Online (Sandbox Code Playgroud)