Laravel8新增自定义路由报Ziggy error: route 'batch.run'不存在如何解决
问题原因
Laravel的Route::resource()方法仅会自动为控制器预设的7个RESTful方法注册路由,分别是index/create/store/show/edit/update/destroy,你自己在控制器中新增的run方法不会被自动纳入路由列表,需要手动声明。
你前端使用的Ziggy库是基于Laravel注册的路由列表生成前端可用的路由映射,未注册的路由自然会抛出「路由不存在」的报错。
解决方案
- 手动注册自定义路由
在web.php的batch资源路由上方添加你的自定义路由(Laravel路由匹配优先级从上到下,自定义路由要放在资源路由前避免被资源路由的通配参数拦截):
// 新增自定义路由放在resource之前 Route::post('batch/{batch}/run', [BatchesController::class, 'run'])->name('batch.run'); Route::resource('batch', BatchesController::class);
- 清除路由缓存
新增路由后执行以下命令清除Laravel路由缓存,确保Ziggy能读取到最新的路由列表:
php artisan route:clear
如果你生成过静态的Ziggy路由文件,需要同时重新生成:
php artisan ziggy:generate
额外优化建议
你控制器中的run方法可以直接使用Laravel路由模型绑定简化写法,框架会自动根据传入的ID查询对应模型,查询失败直接返回404,不用手动写查询逻辑:
public function run(Request $request, Batch $batch) { $batch->run(); $request->session()->flash('success', 'Batch run successfully!'); // 注意:你这里跳转用的batch.running路由也需要提前注册,否则会抛出后端路由不存在错误 return redirect()->route('batch.running'); }
内容的提问来源于stack exchange,提问作者user3934998
相关产品推荐
相关产品推荐

