Laravel表单提交报错Attempt to read property "name" on array求助
问题排查与解决方案
错误根源:$req->input() 方法返回的是数组类型,你代码中用对象访问符->去读取数组的键值,自然会触发「Attempt to read property "name" on array」的错误。
可选修复方案如下:
- 方案1:改用数组语法读取请求参数
把所有$data->xxx格式的调用改成数组取值$data['xxx']即可,修改后的控制器代码参考:class UserController extends Controller { function registerUser(Request $req) { $data = $req->input(); $user_model = new User; $user_model->fullname = $data['name']; $user_model->mobile = $data['mobile']; $user_model->email = $data['email']; // 注意:密码不要明文存库,需要做哈希加密 $user_model->password = bcrypt($data['password']); $user_model->save(); return "registered successfully"; } } - 方案2:直接从Request实例读取参数,无需提前存入
$data变量,写法更简洁:class UserController extends Controller { function registerUser(Request $req) { $user_model = new User; $user_model->fullname = $req->name; $user_model->mobile = $req->mobile; $user_model->email = $req->email; $user_model->password = bcrypt($req->password); $user_model->save(); return "registered successfully"; } } - 方案3:使用批量赋值简化代码,前提是你需要先在User模型中设置
$fillable属性,放行允许批量写入的字段:
首先修改User模型:
控制器代码可以简化为:// app/Models/User.php protected $fillable = ['fullname', 'mobile', 'email', 'password'];function registerUser(Request $req) { User::create([ 'fullname' => $req->name, 'mobile' => $req->mobile, 'email' => $req->email, 'password' => bcrypt($req->password) ]); return "registered successfully"; }
额外提醒:绝对不要直接将用户输入的明文密码存入数据库,Laravel内置的bcrypt()、Hash::make()方法都可以实现密码哈希加密,必须加上这步安全处理。
内容的提问来源于stack exchange,提问作者SwottingDeveloper
相关产品推荐
相关产品推荐

