3

我有一个购物车,我希望能够传递可变数量的可选参数。诸如:排序、过滤、包含/排除等。所以 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, ...)
{
    ...
});

然后例如只排除帽子我必须有一个如下的网址:

/products/sort/alphabetically/filter/false/socks/true/hats/false

但这似乎真的……不优雅。有没有这样做的好方法?我想我也可以尝试编写一个服务器重写规则来解决这个问题,但我不喜欢绕过 Laravel 的想法。

4

1 回答 1

4

您应该将查询字符串(GET 参数)用于此类过滤器。使用查询字符串时,参数可以按任何顺序排列,如果不需要,可以轻松跳过。method="GET"制作一个可以过滤列表的简单表单(带有 )也很容易

使用 GET 参数的 URL 看起来更像:

/products
/products?sort=alphabetically
/products?filter=cloths
/products?socks=true
/products?sort=alphabetically&socks=true&hats=false

然后可以使用 GET 参数单独检索Input::get('name', 'default')或作为一个集合检索Input::all(). 这也是分页器将页码添加到您的链接的方式。

于 2013-04-11T12:10:20.473 回答