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

Laravel路由中如何获取URL里的第二个参数(产品ID)?

解决Laravel产品页路由无法获取产品ID的问题

问题根源很明确:路由定义的参数顺序是{category}在前、{product}在后,但你的控制器方法只声明了$product这一个参数,所以URL中第一个参数(分类ID)会被赋值给$product,自然拿不到产品ID。下面给你两种解决方式:

1. 按路由参数顺序接收参数

直接调整控制器方法的参数列表,按照路由定义的参数顺序依次接收$category和$product:

public function productPage($category, $product)
{
    $currentProduct = Product::find($product);
    return view('product', compact('currentProduct'));
}

这样$product就会正确对应URL中的产品ID,$category对应分类ID,如果用不到$category可以保留参数占位(不影响功能)。

2. 使用路由模型绑定(更优雅的方案)

Laravel的路由模型绑定可以自动根据参数查询对应模型实例,还能顺便做关联验证:

步骤1:调整路由(可选指定字段,默认用主键id)

Route::get('/catalog/{category}/{product}', [ProductController::class, 'productPage']);
// 如果需要明确指定用id字段匹配,可写成:
// Route::get('/catalog/{category:id}/{product:id}', [ProductController::class, 'productPage']);

步骤2:修改控制器方法,直接注入模型

public function productPage($category, Product $product)
{
    // 这里$product已经是查询好的Product实例,无需手动调用find()
    return view('product', compact('product'));
}

进阶:验证产品与分类的关联(可选)

如果需要确保访问的产品确实属于当前分类,先在Product模型中定义关联:

// app/Models/Product.php
public function category()
{
    return $this->belongsTo(Category::class);
}

然后修改控制器方法,同时注入Category模型并验证关联:

public function productPage(Category $category, Product $product)
{
    if ($product->category_id !== $category->id) {
        abort(404); // 产品不属于该分类时返回404
    }
    return view('product', compact('product'));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:50:00