我可以在Laravel 4中拥有可变数量的URI参数或键值对吗?

时间:2013-04-03 02:37:23

标签: routing laravel optional-parameters laravel-4 url-parameters

我有一个购物车,我希望能够传递可变数量的可选参数。例如:排序依据,过滤依据,包括/排除等。所以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的想法。

1 个答案:

答案 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参数。这也是分页器将页码添加到链接的方式。