我的Laravel应用程序中有一个非常奇怪的问题。
在我的申请中:我有一个字段,用户必须在注册时输入他们的出生日期。注册并首次登录后,它都能正确保存并正确显示(注册后会自动登录)。但是一旦您注销并重新登录:生日日期将重置为今天的日期。这就是它变得奇怪的地方:它只发生在生产服务器上。它在本地开发服务器上表现得非常正常。
它只发生在登录的特定帐户上,并不会立即影响所有帐户。
生产服务器从Laravel Forge运行并托管在DigitalOcean上。生产服务器运行的是Ubuntu 18.04和PHP 7.2版
本地开发服务器是Windows机器,我正在使用Laragon附带的任何东西。
Laravel使用的版本是5.6
现在这里是生日字段周围的所有代码:
数据库迁移
Schema::table('users', function (Blueprint $table) {
$table->timestamp('birthday')->after('password');
});
RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
...
'birthday' => 'required|date_format:d.m.Y',
...
]);
}
protected function create(array $data)
{
return User::create([
...
'birthday' => Carbon::parse($data['birthday'])->format('Y-m-d H:i:s'),
...
]);
}
LoginController使用从Laravel 5.6版中的artisan命令make:auth
生成的默认的,未触及的登录代码。
以下是我的用户首选项的控制器代码,他们可以在注册期间错过输入日期时更改其出生日期。
AccountController.php这是抓取当前登录用户并显示其首选项的代码:
public function index() {
$user = User::find(Auth::id());
return view('account.account')->withUser($user);
}
这是在点击保存时保存和更新其首选项的部分:
public function update(Request $request) {
$this->validate($request, [
...
'birthday' => 'required|date|before:-15 years'
]);
$user = User::find(Auth::id());
...
$user->birthday = Carbon::parse($request->birthday)->format('Y-m-d H:i:s');
...
$user->save();
Session::flash('success', 'Din bruker ble oppdatert.');
return redirect()->route('my.account');
}
这一切都很好,它在数据库中正确更新和设置生日。它只会更改为用户登录时的今天日期。本地开发服务器不会发生这种情况,只会在生产服务器中发生。这使得调试非常困难。
如果您需要更多信息,请告诉我。任何帮助是极大的赞赏 :)
将列的类型从timestamp
更改为datetime
。