Laravel 5.3 多参数路由模型绑定

Fus*_*ion 5 laravel-routing laravel-5.3

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

网络路线:

Route::get('{color}/{slug}','Products@page');
Run Code Online (Sandbox Code Playgroud)

因此url www.mysite.com/blue/shoe将绑定到shoe具有color蓝色的模型。

小智 9

首先,像下面这样的路线会感觉更自然:

Route::get('{product}/{color}', 'Products@page');
Run Code Online (Sandbox Code Playgroud)

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

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

Route::get('{color}/{product}', 'Products@page');
Run Code Online (Sandbox Code Playgroud)

然后,在 的boot方法中RouteServiceProvider.php,我会添加如下内容:

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

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

first 这里很重要,因为在解析这样的路由模型时,您实际上希望返回单个模型。

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

无论如何,我在寻找一种方法来实现我上面演示的内容时最终遇到了这个问题,所以希望它会帮助其他人。