使用Postman调用Laravel注册接口遇属性未初始化错误求助
问题:Laravel注册接口POST请求报错
错误详情
发送POST请求到http://localhost:8000/api/v1/auth/register时触发错误:
Error: Typed property Illuminate\Http\Request::$password must not be accessed before initialization
错误位于文件C:\Users\Desktop\project\app\Http\Controllers\Api\V1\Auth\CustomerAuthController.php第70行,对应代码:
'password' => bcrypt($request->password),
注册接口代码
public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required|unique:users', 'phone' => 'required|unique:users', 'password' => 'required|min:8', ], [ 'name.required' => 'The name field is required.', 'phone.required' => 'The phone field is required.', ]); if ($validator->fails()) { return response()->json(['errors' => Helpers::error_processor($validator)], 403); } $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'phone' => $request->phone, 'password' => bcrypt($request->password), ]); $token = $user->createToken('ShopCustomerAuth')->accessToken; return response()->json(['token' => $token,'is_phone_verified' => 0, 'phone_verify_end_url'=>"Api/V1/auth/verify-phone" ], 200); }
请求体内容
{ "name":"user", "email":"test@gmail.com", "phone":"12345678", "password":"12345678" }
问题原因
这是PHP 7.4+类型属性初始化规则导致的问题:如果Illuminate\Http\Request类中给$password属性声明了类型但未完成初始化,直接通过$request->password访问会触发该错误。Laravel中正确获取请求参数的方式应该用框架提供的方法,而非直接访问属性。
解决方案
将代码中直接访问属性的方式改为使用input()方法获取请求参数:
修改后的核心代码片段:
$user = User::create([ 'name' => $request->input('name'), 'email' => $request->input('email'), 'phone' => $request->input('phone'), 'password' => bcrypt($request->input('password')), ]);
也可以使用$request->get('password'),效果和input()一致。统一使用框架方法获取参数,能避免类型属性相关的初始化问题,同时更符合Laravel的规范。
内容的提问来源于stack exchange,提问作者Yahia
相关产品推荐
相关产品推荐

