Laravel创建用户时未赋值变量$userInfo错误修复求助
修复未赋值变量
$userInfo的PHP错误 问题根源
你遇到的Use of unassigned variable '$userInfo'错误,核心原因是仅当用户不存在(进入if分支)时才定义了$userInfo,当用户已存在时,$userInfo从未被初始化,直接调用其方法就会触发错误。另外原代码还有两处额外问题:
- 重复执行了
$user = User::where($map)->first();查询 - 直接访问
$user->id会在$user为null时引发空指针错误
修复方案
- 移除重复的用户查询语句
- 先判断
$user是否为null来确认用户是否存在 - 用户已存在时,将查询到的
$user赋值给$userInfo - 用
User::find($userID)简化查询逻辑
修复后的完整代码
public function createUser(Request $request) { try { // Validate $validateUser = Validator::make($request->all(), [ 'avatar' => 'required', 'type' => 'required', 'open_id' => 'required', 'name' => 'required', 'email' => 'required|email|unique:users,email', ]); if ($validateUser->fails()) { return response()->json([ 'status' => false, 'message' => 'validation error', 'errors' => $validateUser->errors() ], 401); } $validated = $validateUser->validated(); $map = [ 'type' => $validated['type'], 'open_id' => $validated['open_id'] ]; $user = User::where($map)->first(); // 用户不存在时创建新用户 if (is_null($user)) { $validated["token"] = md5(uniqid().rand(10000,99999)); $validated['created_at'] = Carbon::now(); $userID = User::insertGetId($validated); $userInfo = User::find($userID); $accessToken = $userInfo->createToken(uniqid())->plainTextToken; $userInfo->access_token = $accessToken; return response()->json([ 'status' => true, 'message' => 'User Created Successfully', 'data' => $userInfo ], 200); } // 用户已存在时直接生成token $userInfo = $user; $accessToken = $userInfo->createToken(uniqid())->plainTextToken; $userInfo->access_token = $accessToken; return response()->json([ 'status' => true, 'message' => 'User Logged In Successfully', 'token' => $userInfo ], 200); } catch (\Throwable $th) { return response()->json([ 'status' => false, 'message' => $th->getMessage() ], 500); } }
内容的提问来源于stack exchange,提问作者Mohammed M
相关产品推荐
相关产品推荐

