Laravel报错Route [companies.show]未定义:数据更新成功但路由跳转失败
解决Route [companies.show] not defined的问题
你已经搞定了数据更新,却在路由跳转这里卡壳了?别着急,咱们一步步排查解决:
1. 先确认路由是否正确定义
首先去你的routes/web.php(如果是API路由就看routes/api.php)里,检查有没有定义companies.show这个命名路由。推荐用资源路由自动生成RESTful路由,或者手动明确命名:
// 推荐:资源路由,自动生成包括show在内的所有标准路由 Route::resource('companies', CompaniesController::class); // 或者手动定义show路由 Route::get('/companies/{company}', [CompaniesController::class, 'show'])->name('companies.show');
注意路由名称的拼写必须完全是companies.show,复数、大小写都不能错。
2. 修正redirect()->route()的写法
你代码里的redirect()->route('compan...明显没写完,正确写法要传完整的路由名称,还要带上路由需要的参数(companies.show需要接收一个company参数):
if($companyUpdate){ // 因为用了隐式模型绑定,直接传$company实例就行 return redirect()->route('companies.show', $company); // 也可以手动传id:return redirect()->route('companies.show', ['company' => $company->id]); }
3. 清除路由缓存(如果是生产环境)
如果是在生产环境,或者之前执行过路由缓存命令,新添加的路由可能不会生效,执行下面的命令清除缓存:
php artisan route:clear
之后可以用php artisan route:list命令查看所有已定义的路由,搜索companies.show确认它存在。
4. 额外小优化:简化你的update代码
你已经用了隐式路由模型绑定,完全不用再写Company::where('id', $company->id),直接更新模型就行:
public function update(Request $request, Company $company){ $company->update([ 'name' => $request->input('name'), 'description' => $request->input('description') ]); return redirect()->route('companies.show', $company); }
这样代码更简洁,也减少了出错的可能~
内容的提问来源于stack exchange,提问作者Hamza Afzal
相关产品推荐
相关产品推荐

