我可以在 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 参数或键值对吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将可变数量的道具传递给 React 中的 JSX 标签

可变参数模板

如何制作可变参数宏(可变数量的参数)

Laravel 4路线,参数数量不受限制

计算机网络:VLSM可变长子网掩码

在迭代可变数量的索引时调用表达式中的索引(Python)