我之前从未使用过Laravel,我正在使用laravels默认用户注册和auth进行3部分注册,用于表单的第1步.每一步都有自己的表.步骤1s表的id列用于链接所有3个表.
目前我正在使用$id = Auth::user()->id在步骤2控制器中获取登录用户ID.相反,如何在创建用户之后将id路由/传递给步骤2控制器存储方法并将视图重定向到步骤2?
在authcontroller中
protected function create(array $data)
{
return User::create([
'email' => $data['email'],
'password' => bcrypt($data['password']),
'firstName' => $data['firstName'],
'middleName' => $data['middleName'],
'lastName' => $data['lastName'],
]);
}
Run Code Online (Sandbox Code Playgroud)
在Illuminate\Foundation\Auth\RegistersUsers;
public function register(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
Auth::guard($this->getGuard())->login($this->create($request->all()));
// pass id to store method in profile and redirect to profileinfo
return view('user/profileinfo');
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式更改AuthController中的create方法:
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$id= $user->id; // Get current user id
return $user;
}
Run Code Online (Sandbox Code Playgroud)
您应该使用返回模型的create()方法,而不是使用返回trueor 的方法:falsesave()
$id = $data->save()->id;
Run Code Online (Sandbox Code Playgroud)
但如果您仍然需要简短的语法,您可以使用批量赋值:
$userModel = new User($data);
$userModel->save();
$id = $userModel->id;
Run Code Online (Sandbox Code Playgroud)