具有多个参数值的 Laravel RESTful API

Posted

技术标签:

【中文标题】具有多个参数值的 Laravel RESTful API【英文标题】:Laravel RESTful API with multiple values of params 【发布时间】:2015-02-02 14:08:58 【问题描述】:

我正在为我的产品制作过滤器,我需要执行类似http://example.com/products?type=laptop&cpu=i7 的操作。这很棒,但我需要使用多种规格来做到这一点。也许用户希望选择酷睿 i7 和酷睿 i5 来比较笔记本电脑的价格。知道如何在 laravel 上做这个 RESTful 吗?

【问题讨论】:

我也不明白。这是一个完全合法的问题。 猜测可能是因为它不是特定于 Laravel 甚至 REST 的。不过,在我看来,这有点苛刻。 (也值得阅读上下按钮上的悬停文本以查看投票标准 - 可以说这个问题没有显示任何研究,并且在某种程度上,它并不是非常清楚。还有一点虽然很苛刻!) 【参考方案1】:

这不是 Laravel 特有的,但您可以做的是将您的想法放在一个分隔符上(fx。一个逗号)并做一个简单的explode() 来分隔它们。

//http://example.com/products?type=laptop&cpu=i7,i5,amdathlon
$cpus = explode("," Input::get('cpu')); //Will produce an array ['i7','i5','amdathlon']

另一种更“原生”的方式是在实际 URL 中创建一个数组,只需将 [] 添加到您的选择名称即可完成(假设您的过滤器是由一个选择元素制作的)

<select name="cpu[]" multiple>
...
</select>

然后可以像这样访问:

//http://example.com/products?type=laptop&cpu[]=i7&cpu[]=i5&cpu[]=amdathlon
$cpus = Input::get('cpu'); //['i7','i5','amdathlon']

然后,您可以执行以下操作:

Cpu::whereIn('core', $cpus)->laptops; 

或者你之后要做的任何事情。

【讨论】:

是的,这是非常普遍的做法。你也可以做一个管道(|)。 第二种方式肯定更“正确”(即正确使用 URL 参数而不是将字符串绑定到数组中)。当然,它确实会产生更丑陋的 URL,但我想这没什么大不了的。 是的,我同意@alexrussell。第二种方式更正确,但逗号分隔的方式更漂亮,更易读,而且我对 SEO 也更友好(我怀疑?)

以上是关于具有多个参数值的 Laravel RESTful API的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 将枢轴附加到具有多个值的表

具有多个参数的 RESTful Spring 服务

具有多个参数的 WCF Restful API

如何设计具有多个输入参数的 RESTful URL

如何验证 Laravel 中连接的多个值的查询字符串?

具有多个参数的 Laravel 自定义验证规则 [重复]