Laravel路由名称无法找到:site.news.show路由未定义求助
问题分析与解决方案
你的核心问题是路由URL模式重复,导致部分路由被覆盖,无法正常注册,进而出现Route [site.news.show] not defined的错误。
问题根源
Laravel路由是按定义顺序从上到下匹配的,当多个路由使用完全相同的URL模式时,后面的路由会覆盖前面的路由:
- 你定义了3个
{slug}的GET路由,最终只有最后一个VideoController@index会生效,前两个新闻、文章的列表路由被覆盖; - 同理,两个
show/{slug}的GET路由,只有最后一个ArticleController@show会生效,新闻的详情路由site.news.show根本没被正确注册。
解决步骤
1. 给不同类型路由设置唯一URL前缀
修改路由定义,为新闻、文章、视频添加专属前缀,避免URL模式冲突:
Route::namespace("Core\Controller\Site") ->prefix("/") ->name("site.") ->group(function () { // 新闻路由:添加news前缀 Route::get("news/{slug}", "NewsController@index")->name("news.index"); Route::get("news/show/{slug}", "NewsController@show")->name("news.show"); // 文章路由:添加article前缀 Route::get("article/{slug}", "ArticleController@index")->name("article.index"); Route::get("article/show/{slug}", "ArticleController@show")->name("article.show"); // 视频路由:添加video前缀 Route::get("video/{slug}", "VideoController@index")->name("video.index"); });
2. 清除路由缓存(若开启过缓存)
如果之前执行过路由缓存命令,需要清除缓存让新路由生效:
php artisan route:clear
3. 验证路由注册状态
运行以下命令查看所有已注册路由,确认site.news.show存在:
php artisan route:list
若列表中能找到该路由,说明注册成功,此时调用route('site.news.show', $item->slug)即可正常生成链接。
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

