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

Laravel 5.3 Route model binding with multiple parameters

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

网络路由:

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

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

尝试将您的控制器更改为:

class Pages extends Controller{

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

        dd($page);

    }

}

您必须添加页面模型。

首先,有这样的路线感觉会更自然:

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

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

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

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

然后,在 RouteServiceProvider.phpboot 方法中,我将添加如下内容:

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

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

first 这里很重要,因为在解析这样的路线模型时,您实际上想要 return 单个模型。

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

无论如何,我在寻找实现上面演示的方法时遇到了这个问题,希望它能对其他人有所帮助。

不要忘记声明参数类型:

Route::delete('safedetail/{safeId}/{slug}', [
    'as' => 'safedetail.delete',
    'uses' => 'SafeDetailController@destroy',
])->where([
    'safeId' => '[0-9]+',
    'slug' => '[a-z]+',
]);