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

Laravel博客路由失效:使用title_slug无法访问文章详情

解决方案

你的问题根源是Laravel隐式路由模型绑定默认使用id字段匹配记录,当传入title_slug时,框架会尝试用该值匹配id字段,自然找不到对应文章。下面提供两种适配Laravel 5.8的解决方法:

方法一:全局修改模型的路由绑定字段

在BlogPost模型中添加getRouteKeyName方法,指定路由匹配时使用title_slug字段:

class BlogPost extends Model
{
    // ... 其他模型代码

    public function getRouteKeyName()
    {
        return 'title_slug';
    }
}

修改后,所有绑定BlogPost的隐式路由都会自动用title_slug查找记录,同时用route('blogPost', $post)生成链接时,也会自动使用title_slug拼接URL。

方法二:针对单个路由指定匹配字段

如果不想全局修改模型的路由绑定规则,可直接在路由中显式指定匹配字段:

Route::get('/blog/{blogPost:title_slug}', ['as' => 'blogPost', 'uses' => 'BlogPostController@show']);

Laravel 5.8支持这种写法,仅当前路由会用title_slug字段查找BlogPost记录,其他路由仍保持默认的id匹配。

注意事项

视图中生成链接时,建议使用路由命名辅助函数,避免手动拼接URL出错:

{{ route('blogPost', $post) }}

这样无论你用id还是title_slug作为匹配字段,都能生成正确的访问链接。

内容的提问来源于stack exchange,提问作者Raphael W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:05