Laravel 5.7出现Undefined variable: form_data错误,请求技术支持
解决Laravel 5.7 Controller store方法的「Undefined variable: form_data」异常
这个问题其实很清晰——你在调用Crud::create($form_data)的时候,变量$form_data根本没有被定义过,PHP自然会抛出未定义变量的错误。下面是两种简单的修复方案,还有一个必须注意的细节:
方案1:直接传入验证后的请求数据
验证通过后,你可以直接用$request->all()获取所有提交的字段,或者用$request->only()指定需要的字段(更安全,能避免意外传入多余参数),直接传给create方法:
public function store(Request $request){ $request->validate([ 'name' => 'required', 'email' => 'required|email', 'number' => 'required|unique:crud|numeric', 'message' => 'required', ]); // 直接使用验证后的请求数据(两种方式选其一) Crud::create($request->all()); // 更推荐:仅传入需要的字段,提升安全性 // Crud::create($request->only(['name', 'email', 'number', 'message'])); return redirect('crud')->with('success', 'Data Added successfully'); }
方案2:先定义$form_data变量再使用
如果你需要对请求数据做额外处理(比如修改某个字段值、添加额外字段),可以先把请求数据赋值给$form_data,再传入create方法:
public function store(Request $request){ $request->validate([ 'name' => 'required', 'email' => 'required|email', 'number' => 'required|unique:crud|numeric', 'message' => 'required', ]); // 先定义变量并赋值 $form_data = $request->all(); // 或者仅获取需要的字段 // $form_data = $request->only(['name', 'email', 'number', 'message']); // 这里可以添加数据处理逻辑,比如: // $form_data['status'] = 'active'; Crud::create($form_data); return redirect('crud')->with('success', 'Data Added successfully'); }
关键注意事项
修复完变量问题后,别忘了确保你的Crud模型设置了$fillable属性,允许批量赋值这些字段,否则会触发MassAssignmentException异常:
// app/Crud.php class Crud extends Model { // 指定可以批量赋值的字段 protected $fillable = ['name', 'email', 'number', 'message']; }
内容的提问来源于stack exchange,提问作者Om Prakash Thakur
相关产品推荐
相关产品推荐

