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

如何修改Laravel Nova中资源的路径为自定义slug形式?

修改Laravel Nova资源路径为Slug形式

要把Nova资源路径从默认的/nova/resources/articles/3改成/nova/resources/articles/my-article-slug,仅在模型中定义getRouteKeyName()是不够的,需要同时配置模型和Nova资源类,具体步骤如下:

  • 1. 配置模型的路由键与解析逻辑
    在你的Article模型中,除了指定路由键为slug,还要明确路由绑定的解析方式,确保系统能通过slug找到对应模型:

    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Article extends Model
    {
        // 指定路由使用slug作为键名
        public function getRouteKeyName()
        {
            return 'slug';
        }
    
        // 定义通过slug解析模型的逻辑
        public function resolveRouteBinding($value, $field = null)
        {
            return $this->where($this->getRouteKeyName(), $value)->firstOrFail();
        }
    }
    
  • 2. 调整Nova资源类的路由配置
    在对应的Nova资源类(通常位于app/Nova/Article.php)中,重写两个方法,确保Nova生成的链接和路由解析都使用slug:

    namespace App\Nova;
    
    use Laravel\Nova\Resource;
    use Illuminate\Http\Request;
    
    class Article extends Resource
    {
        public static $model = \App\Models\Article::class;
        public static $title = 'title';
        public static $search = ['id', 'title', 'slug'];
    
        // 让Nova生成资源链接时使用slug作为参数
        public function getRouteKey()
        {
            return $this->slug;
        }
    
        // 确保Nova能通过slug正确找到对应资源
        public static function resolveRouteBinding($value, $field = null)
        {
            return static::$model::where('slug', $value)->firstOrFail();
        }
    
        public function fields(Request $request)
        {
            return [
                // 你的字段定义...
            ];
        }
    }
    
  • 3. 清除路由缓存
    执行以下命令清除路由缓存,确保新的路由配置生效:

    php artisan route:clear
    

完成以上步骤后,Nova的资源详情、编辑等路径就会使用slug替代ID。注意要确保数据库中articles表的slug字段具有唯一性约束,避免出现多个文章使用相同slug导致的路由解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:17