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

Laravel 5.6资源API路由如何用Slug替代ID访问?

用Slug替代ID访问Laravel 5.6资源接口的实现方法

嘿,我来帮你搞定这个需求!在Laravel 5.6里,要实现用slug代替默认ID访问资源,其实有两种很方便的方式,咱们一步步来:

方法一:修改模型的路由键名(全局生效)

Laravel的隐式路由模型绑定默认是用id字段来查找模型的,咱们只需要在Category模型里指定用slug作为路由匹配的键名就行:

// app/Category.php
class Category extends Model
{
    // 告诉Laravel,路由绑定的时候用slug字段来查找
    public function getRouteKeyName()
    {
        return 'slug';
    }
}

这样改完之后,你原来的Route::resource路由不需要做任何修改,当用户访问/categories/my-slug时,Laravel会自动用slug字段去数据库匹配对应的分类,你的show方法里的隐式模型绑定依然能正常工作,完全不用改动Controller的代码~

方法二:自定义路由参数(仅当前路由生效)

如果你不想全局修改模型的路由键,或者只是想给这个分类路由单独设置,可以在定义资源路由的时候,通过parameters方法指定参数对应的字段:

// routes/api.php(或者web.php,看你的接口定义在哪)
Route::resource('categories', 'CategoryController')
    ->middleware('cors')
    ->parameters([
        'categories' => 'slug' // 把categories参数对应到slug字段
    ]);

这种方式同样不需要改动你的CategoryController和CategoryResource代码,Laravel会自动用slug去查找对应的模型实例。

重要注意事项

  • 确保你的categories数据表中存在slug字段,并且这个字段是唯一的(避免多个分类用同一个slug导致查找出错)。你可以在迁移文件里给slug字段加上唯一约束:
// 分类表的迁移文件
$table->string('slug')->unique();
  • 如果slug是用户输入或者自动生成的,记得处理好重复的情况(比如用Str::slug()生成唯一slug)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:20