【发布时间】:2013-05-11 22:27:30
【问题描述】:
我正在编写一个简单的 API,并在此 API 之上构建一个简单的 Web 应用程序。
因为我想直接“使用我自己的 API”,所以我首先在 Google 上搜索并在 StackOverflow 上找到了这个答案,它完美地回答了我最初的问题:Consuming my own Laravel API
现在,这很好用,我可以通过执行以下操作来访问我的 API:
$request = Request::create('/api/cars/'.$id, 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
这太棒了!但是,我的 API 还允许您向 GET 查询字符串添加可选的 fields 参数,以指定应返回的特定属性,例如:
http://cars.com/api/cars/1?fields=id,color
现在我在 API 中实际处理这个问题的方式大致如下:
public function show(Car $car)
{
if(Input::has('fields'))
{
//Here I do some logic and basically return only fields requested
....
...
}
我会假设我可以做一些类似于我之前使用查询字符串无参数方法所做的事情,如下所示:
$request = Request::create('/api/cars/' . $id . '?fields=id,color', 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
但是,似乎并非如此。长话短说,在单步执行代码之后,Request 对象似乎已正确创建(并且它正确提取了 fields 参数并为其分配了 id,color ),并且 Route 似乎可以正常发送,但是在我的 API 控制器本身中,我不知道如何访问 field 参数。使用Input::get('fields')(这是我用于“正常”请求的)不会返回任何内容,我很确定这是因为静态Input 引用或限定了传入的初始请求,而不是我发送的新请求从应用程序本身“手动”。
所以,我的问题是我应该怎么做?难道我做错了什么?理想情况下,我希望避免在我的 API 控制器中做任何丑陋或特殊的事情,我希望能够将 Input::get 用于内部调度的请求,而不必进行第二次检查等。
【问题讨论】:
标签: api request laravel routes laravel-4