Laravel CRUD项目BatterFirst路由缺参数、删除不生效问题求助
问题解决方案
问题原因说明
两个报错本质是同一个问题:Laravel隐式模型绑定失效,控制器方法拿到的$batterFirst是空模型,而非你要操作的目标数据。
原因是你定义的资源路由参数名和控制器方法的参数名不匹配:
- 你定义的资源路由名为大驼峰
BatterFirst,Laravel默认生成的路由参数为{BatterFirst} - 控制器方法中注入的参数名为小驼峰
$batterFirst,二者命名不一致,导致隐式绑定无法自动查询对应ID的数据,返回空模型。
空模型调用delete()方法不会触发数据库删除操作也不会报错,所以会出现提示删除成功但数据未变的情况;同时编辑页中$batterFirst->id为空,提交更新时就会提示缺少路由参数。
具体修复步骤
第一步:修复路由参数匹配问题(二选一即可)
方案A(更推荐):修改路由指定参数名
将web.php中的资源路由代码替换为:
Route::resource('BatterFirst', BatterFirstController::class)->parameters([ 'BatterFirst' => 'batterFirst' ]);
此方法会将路由参数统一改为{batterFirst},和控制器现有参数名完全匹配,无需修改控制器代码。
方案B:修改控制器参数名
将控制器BatterFirstController中show/edit/update/destroy四个方法的参数名统一改为和路由参数一致:
// 原来的写法 public function show(BatterFirst $batterFirst) // 修改为 public function show(BatterFirst $BatterFirst) // 其余edit/update/destroy方法的参数都同步修改为$BatterFirst
第二步:修复edit页面的输入框错误
edit.blade.php中六次的输入框value赋值错误,将对应代码替换为:
<input type="number" name="sixs" value="{{ $batterFirst->sixs }}" class="form-control" placeholder="sixs">
原代码错误把runs的值赋值给了sixs字段,会导致修改时数据错乱。
修复验证
修改完成后执行php artisan route:clear清空路由缓存,再访问编辑页和测试删除功能即可正常运行。
内容的提问来源于stack exchange,提问作者Shahed Khan
相关产品推荐
相关产品推荐

