You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:00:52