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

Laravel 8 资源路由前缀修改后Slug路由模型绑定异常问题求助

问题成因

Laravel 资源路由会自动根据传入的资源名称生成对应路由参数:你最初定义Route::resource('/posts', ...)时,生成的详情路由参数为{post},和控制器show方法里的$post参数名完全匹配,因此隐式模型绑定会自动根据路由传递的slug值查询对应的Post模型,功能正常。
当你把资源名称修改为news后,Laravel自动生成的详情路由参数变为{news},和控制器方法里的$post参数名不匹配,隐式模型绑定不会触发,此时Laravel只会注入一个未加载业务数据的空Post模型实例,因此你只能看到Post模型的结构,无法获取对应slug的文章数据。

解决方案

任选以下任意一种方案修复即可:

方案1:修改控制器参数名

将PostController的show方法参数名调整为和路由参数一致的$news:

public function show(Post $news)
{
    dd($news);
}

方案2:手动指定资源路由参数名(更推荐,语义一致性更强)

在定义路由时手动指定参数保持为post,无需修改控制器原有代码:

Route::resource('/news', App\Http\Controllers\PostController::class)
    ->only(['index','show'])
    ->parameters(['news' => 'post']);

修改后详情路由会保持为/news/{post},和原有控制器参数匹配,隐式模型绑定即可恢复正常。

内容的提问来源于stack exchange,提问作者Maik Lowrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:06