Laravel 5.3路由模型绑定多个参数

问题描述 投票:3回答:2

是否可以使用多个参数进行路径模型绑定?例如

网络路线:

Route::get('{color}/{slug}','Products@page');

所以url www.mysite.com/blue/shoe将被绑定到shoe模型,其中有color蓝色。

laravel-routing laravel-5.3
2个回答
2
投票

首先,拥有如下路线会更自然:

Route::get('{product}/{color}', 'Products@page');

并通过路由绑定解析product,并直接在控制器方法中使用color参数,例如获取蓝鞋列表。

但我们假设由于某种原因这是一个要求。我会让你的路线更加明确,首先:

Route::get('{color}/{product}', 'Products@page');

然后,在bootRouteServiceProvider.php方法中,我会添加这样的东西:

Route::bind('product', function ($slug, $route) {
    $color = $route->parameter('color');

    return Product::where([
        'slug'  => $slug,
        'color' => $color,
    ])->first() ?? abort(404);
});

first在这里很重要,因为在解析这样的路线模型时,你实际上想要返回一个模型。

这就是为什么我认为它没有多大意义,因为你想要的可能是一个特定颜色的产品列表,而不仅仅是一个。

无论如何,我在寻找实现上述目标的方法时最终得到了这个问题,所以希望它能帮助别人。


-1
投票

尝试将控制器更改为:

class Pages extends Controller{

    public function single($lang, App\Page $page){

        dd($page);

    }

}

您必须添加页面模型。

© www.soinside.com 2019 - 2024. All rights reserved.