是否可以使用多个参数进行路径模型绑定?例如
网络路线:
Route::get('{color}/{slug}','Products@page');
所以url
www.mysite.com/blue/shoe
将被绑定到shoe
模型,其中有color
蓝色。
首先,拥有如下路线会更自然:
Route::get('{product}/{color}', 'Products@page');
并通过路由绑定解析product
,并直接在控制器方法中使用color
参数,例如获取蓝鞋列表。
但我们假设由于某种原因这是一个要求。我会让你的路线更加明确,首先:
Route::get('{color}/{product}', 'Products@page');
然后,在boot
的RouteServiceProvider.php
方法中,我会添加这样的东西:
Route::bind('product', function ($slug, $route) {
$color = $route->parameter('color');
return Product::where([
'slug' => $slug,
'color' => $color,
])->first() ?? abort(404);
});
first
在这里很重要,因为在解析这样的路线模型时,你实际上想要返回一个模型。
这就是为什么我认为它没有多大意义,因为你想要的可能是一个特定颜色的产品列表,而不仅仅是一个。
无论如何,我在寻找实现上述目标的方法时最终得到了这个问题,所以希望它能帮助别人。
尝试将控制器更改为:
class Pages extends Controller{
public function single($lang, App\Page $page){
dd($page);
}
}
您必须添加页面模型。