我有一个购物车,我希望能够传递可变数量的可选参数。例如:排序依据,过滤依据,包括/排除等。所以URL可能是:
/products
/products/sort/alphabetically
/products/filter/cloths
/products/socks/true
/products/sort/alphabetically/socks/true/hats/false/
等
我想我可以为所有可能的参数创建一个包含占位符的路径,并在URL中设置默认值,如下所示:
Route::get('products/sort/{$sort?}/filter/{$filter?}/socks/{$socks?}/hats/{$hats?}/...', function($sort = 'alphabetically', $filter = false, $socks = true, $hats = true, ...)
{
...
});
然后,例如,为了排除帽子,我必须拥有如下URL:
/products/sort/alphabetically/filter/false/socks/true/hats/false
但这似乎真的......不优雅。有这样做的好方法吗? 我想我也可以尝试写一个服务器重写规则来解释这个问题,但我不喜欢绕过Laravel的想法。
答案 0 :(得分:4)
您应该对这些过滤器使用查询字符串(GET参数)。当您使用查询字符串时,参数可以按任何顺序排列,如果不需要,可以轻松跳过。制作一个可以过滤列表
的简单表单(method="GET"
)也很容易
使用GET参数,URL看起来更像:
/products
/products?sort=alphabetically
/products?filter=cloths
/products?socks=true
/products?sort=alphabetically&socks=true&hats=false
然后可以使用Input::get('name', 'default')
或Input::all()
的集合单独检索GET参数。这也是分页器将页码添加到链接的方式。