我可以在 Laravel 4 中拥有可变数量的 URI 参数或键值对吗?
Posted
技术标签:
【中文标题】我可以在 Laravel 4 中拥有可变数量的 URI 参数或键值对吗?【英文标题】:Can I have a variable number of URI parameters or key-value pairs in Laravel 4? 【发布时间】:2013-03-24 13:32:18 【问题描述】:我有一个购物车,我希望它能够传递可变数量的可选参数。诸如:排序、过滤、包含/排除等。所以 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 的想法。
【问题讨论】:
【参考方案1】:您应该将查询字符串(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')
单独检索GET 参数,或者使用Input::all()
作为集合检索。这也是分页器将页码添加到您的链接的方式。
【讨论】:
是的,这就是我最终所做的。感谢您提供如此彻底的答案!以上是关于我可以在 Laravel 4 中拥有可变数量的 URI 参数或键值对吗?的主要内容,如果未能解决你的问题,请参考以下文章