Laravel框架CRUD分类编辑功能点击跳转404页面问题求助
问题原因及修复方案
你遇到的404错误由以下几个代码错误导致,按优先级修复即可:
- 路由参数语法错误:Laravel路由的路径参数不需要加
$前缀,你编写的{$id}属于语法错误,无法匹配到对应路由,直接触发404。 - 路由路径命名错误:编辑路由的路径错误定义为
/categorie/store/{$id},和新增逻辑的store路径冲突,路由无法正常匹配。 - 控制器方法参数冲突:edit方法同时声明了路由模型绑定注入
Category $category和手动传参$id,参数解析逻辑冲突。
修复后的代码
1. 路由代码
Route::get('/categorie',[CategoryController::class,'index'])->name('categorie.categorie'); Route::get('/categorie/create',[CategoryController::class,'create'])->name('categorie.crea'); Route::post('/categorie/store',[CategoryController::class,'store'])->name('categorie.store'); // 修正编辑路由的路径和参数语法 Route::get('/categorie/edit/{id}',[CategoryController::class,'edit'])->name('categorie.edit'); // 修正更新路由的参数语法 Route::post('/categorie/update/{id}',[CategoryController::class,'update'])->name('categorie.update');
如果要使用Laravel路由模型绑定简化代码,可以将路由参数改为{category},后续不需要手动查询数据:
Route::get('/categorie/edit/{category}',[CategoryController::class,'edit'])->name('categorie.edit'); Route::post('/categorie/update/{category}',[CategoryController::class,'update'])->name('categorie.update');
2. 控制器代码
对应普通传参的路由,edit方法修改为:
public function edit($id) { $category=Category::findOrFail($id); return view('categorie.editcat', compact('category')); }
对应路由模型绑定的路由,edit方法修改为:
public function edit(Category $category) { return view('categorie.editcat', compact('category')); }
同时修正update方法的逻辑错误(原代码调用静态updated方法写法错误):
// 对应普通传参路由 public function update(Request $request, $id) { $category=Category::findOrFail($id); $category->update([ 'nome'=>$request->nome, ]); return redirect()->back(); } // 对应模型绑定路由 public function update(Request $request, Category $category) { $category->update([ 'nome'=>$request->nome, ]); return redirect()->back(); }
3. Blade模板代码
编辑按钮不需要套GET表单,直接用a标签跳转更简洁,同时可以把图标改为编辑样式更符合业务逻辑:
<th> <a href="{{route('categorie.crea')}}"><i class="fas fa-plus-circle"></i></a> <a href="{{route('categorie.edit',$cat->id)}}"><i class="fas fa-edit"></i></a> </th>
内容的提问来源于stack exchange,提问作者alessio scionti
相关产品推荐
相关产品推荐

