假设我有一个用于搜索汽车的页面,该页面包含3个可选参数,brand
,year
和color
简化的路线示例:
Route::get('/cars/{brand?}/{year?}/{color?}', function ($brand = NULL, $year = NULL, $color = NULL) {
echo "brand is:".$brand."<br>";
echo "year is:".$year."<br>";
echo "color is:".$color."<br>";
});
我不知道如何仅传递year
参数?
如果传递了所有3个参数(例如:/cars/_/2010/_
),则可以使用,但这是非常微不足道的解决方案。
什么是正确的方法?
答案 0 :(得分:0)
我不知道这是否可行,因为您可能最终仅传递了两个参数,而Laravel无法理解这是brand
,color
还是year
关于使用的URL参数的方法,我将花费两分钱:
public function getCars(Request $request){
Validator::validate($request->all(), [
'brand' => 'nullable|string',
'year' => 'nullable|integer',
'color' => 'nullable|string'
]);
$cars = Car::select('id', '...');
if($request->has('brand')){
// get cars with that brand
$cars->where('brand', $request->brand);
}
// ... and so on with the other parameters
$cars = $cars->paginate(10); // or $cars->get()
}
这是一个非常简单的示例,因此您必须根据需要进行自定义。希望有帮助。
答案 1 :(得分:0)
如官方文档所述,路由参数根据它们的顺序注入到路由回调/控制器中。在这种特定情况下,Laravel必须知道每个参数的唯一方法就像您建议的那样(请参见https://laravel.com/docs/5.6/routing#route-parameters)。
无论如何,如果执行搜索需要3个参数,则您可能会考虑将请求谓词从 GET 更改为 POST ,并将所有参数作为POST传递请求数据,而不是查询字符串本身。