Laravel资源控制器更新路由缺失参数问题求助
Laravel资源控制器路由参数缺失问题解决
错误原因
你的资源路由one_one.update对应的URI是one_one/{one_one},要求传递名为one_one的参数,但你调用route()时只传了$student->id单个值,Laravel无法将其匹配到正确的参数名,导致出现参数缺失错误。
解决方案
方法1:直接传递模型实例(推荐)
利用Laravel的路由模型绑定,直接把$student实例传给route()函数,Laravel会自动提取模型的ID作为路由参数,同时匹配参数名:
修改edit.blade.php中的表单action:
<form method="POST" action="{{ route('one_one.update', $student) }}" enctype="multipart/form-data">
修改index.blade.php中的编辑和删除路由:
<form action="{{ route('one_one.edit', $student) }}"><button type="submit">Edit</button></form> <form action="{{ route('one_one.destroy', $student) }}" method="POST"> @csrf @method('DELETE') <button type="submit">Delete</button> </form>
方法2:传递带参数名的关联数组
如果要手动传递ID,需要明确指定参数名与路由定义的{one_one}对应:
修改edit.blade.php的表单action:
<form method="POST" action="{{ route('one_one.update', ['one_one' => $student->id]) }}" enctype="multipart/form-data">
同理修改index.blade.php中的路由:
<form action="{{ route('one_one.edit', ['one_one' => $student->id]) }}"><button type="submit">Edit</button></form> <form action="{{ route('one_one.destroy', ['one_one' => $student->id]) }}" method="POST"> @csrf @method('DELETE') <button type="submit">Delete</button> </form>
额外修复:控制器update方法的错误
你的update方法中使用Student::update()是错误的,这会执行批量更新(无条件时会修改所有学生记录),且返回布尔值,后续调用$student->studentdetail()会报错。应改为调用模型实例的update()方法:
public function update(Request $request, Student $student) { $student->update([ 'name'=>$request->name, 'contact'=>$request->contact, 'email'=>$request->email, ]); $student->studentdetail()->update([ 'alter_contact'=>$request->alter_contact, 'address'=>$request->address, 'course'=>$request->course, ]); return redirect()->route('one_one.index')->with('success','Data updated successfully'); }
内容的提问来源于stack exchange,提问作者Pranav Sompura
相关产品推荐
相关产品推荐

