api - 如何访问我在 Laravel 4 中手动发送的请求的查询字符串参数?

标签 api request laravel routes laravel-4

我正在编写一个简单的 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 查询字符串添加可选字段参数,以指定应返回的特定属性,例如:
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 Controller 本身中,我不知道如何访问 field 参数。使用 Input::get('fields') (这是我用于“正常”请求的内容)什么都不返回,我相当确定这是因为静态 Input引用或限定传入的初始请求,而不是我从应用程序本身“手动”发送的新请求。

所以,我的问题是我应该怎么做?难道我做错了什么?理想情况下,我想避免在我的 API Controller 中做任何丑陋或特殊的事情,我希望能够将 Input::get 用于内部调度的请求,而不必进行第二次检查等。

最佳答案

你是正确的,使用 Input实际上是引用当前请求,而不是您新创建的请求。您的输入将在您使用 Request::create() 实例化的请求实例本身上可用。 .

如果您正在使用(应该如此)Illuminate\Http\Request实例化您的请求,然后您可以使用 $request->input('key')$request->query('key')从查询字符串中获取参数。

现在,这里的问题是您可能没有 Illuminate\Http\Request route 可供您使用的实例。这里的一个解决方案(以便您可以继续使用 Input 外观)是物理替换当前请求的输入,然后将其切换回来。

// Store the original input of the request and then replace the input with your request instances input.
$originalInput = Request::input();

Request::replace($request->input());

// Dispatch your request instance with the router.
$response = Route::dispatch($request);

// Replace the input again with the original request input.
Request::replace($originalInput);

这应该有效(理论上),并且在发出内部 API 请求之前和之后,您仍然应该能够使用原始请求输入。

关于api - 如何访问我在 Laravel 4 中手动发送的请求的查询字符串参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597420/

相关文章:

c# - 使用 C# 发布到 Facebook 粉丝页面的墙上的最简单方法!

laravel - 如何防止 Laravel 剥离空数组

php - 如何从 Magento 1.7 REST API 获取访问 token 和访问 token secret

javascript - API 不会接受串联输入

iphone - 如何使用 Parse 接受或拒绝好友请求?

javascript - 当我尝试使用 nodejs 请求模块传递 header 信息时,出现以下 TypeError 错误

java - LibGDX 中的并发 Http 请求

php - Laravel 插入和检索关系

mysql - PHP 从 7.1 切换到 7.2 后允许的内存大小耗尽

python - 使用 Dropbox API 上传 block