You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel创建用户时未赋值变量$userInfo错误修复求助

修复未赋值变量$userInfo的PHP错误

问题根源

你遇到的Use of unassigned variable '$userInfo'错误,核心原因是仅当用户不存在(进入if分支)时才定义了$userInfo,当用户已存在时,$userInfo从未被初始化,直接调用其方法就会触发错误。另外原代码还有两处额外问题:

  • 重复执行了$user = User::where($map)->first();查询
  • 直接访问$user->id会在$user为null时引发空指针错误

修复方案

  1. 移除重复的用户查询语句
  2. 先判断$user是否为null来确认用户是否存在
  3. 用户已存在时,将查询到的$user赋值给$userInfo
  4. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:35:08