从 Guzzle post 请求中获取 form_params 流明 api 数据
Fetch form_params data from Guzzle post request in lumen api
在我的 laravel 5.7 应用程序中,我有一个具有以下方法的控制器,它使用 GuzzleHttp\Client 向我的 lumen api.[=19= 发送 post 请求]
public function insert(Request $request)
{
$domain = Config::get('url.gcr_api'); // gcr_api is defined in app/config/url.php
$url = $domain . "/api/v1/campaign/insert";
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$client = new Client;
$response = $client->request('POST', $url , [
'headers' => [
'X-XSRF-TOKEN' => csrf_token(),
],
'form_params' => [
'name' => $campaign_name,
'bank_id' => $campaign_provider,
]
]
);
$data = json_decode($response->getBody(), true);
return $data;
}
}
这里是上面方法调用的流明api的代码
public function insert(Request $request) {
try {
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
DB::table('campaign')->insert($data);
$response = array(
'status' => 'success',
'message' => 'Campaign created successfully',
);
return response()->json($response);
}
catch(Exception $e) {
// When query fails.
$response = array(
'status' => 'failed',
'message' => 'Failed to create campaign',
);
return response()->json($response);
}
}
每次调用我的 laravel 应用程序控制器的插入方法时,我都会收到此错误:
GuzzleHttp \ Exception \ ServerException (500) Server error: POST
http://localhost:8000/api/v1/campaign/insert
resulted in a 500
Internal Server Error
response:
我认为错误与我的 lumen api 无法获取 form_params 数据有关,所以我在我的 lumen api 代码中注释掉了这段代码并且错误消失:
/*$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
DB::table('campaign')->insert($data); */
但是我需要在我的 lumen api 中获取 form_params 数据,我该怎么做?
你的假设部分正确,它可以访问form_params,但你尝试获取的form_params与实际参数不同:
为了传递参数,您使用以下数组:
'form_params' => [
'name' => $campaign_name,
'bank_id' => $campaign_provider,
]
此数组将使用键 'name' 将值设置为 $campaign_name
,将 $campaign_provider
设置为 bank_id
。到目前为止这段代码没有任何问题。
然而,在您的 API 中,您执行以下操作:
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
但是没有键 campaign_name
或 campaign_provider
,因为它们已更改为 name
和 bank_id
。因此,如果您将其更改为以下内容,它应该可以工作:
$campaign_name = $request->input('name');
$campaign_provider = $request->input('bank_id');
在我的 laravel 5.7 应用程序中,我有一个具有以下方法的控制器,它使用 GuzzleHttp\Client 向我的 lumen api.[=19= 发送 post 请求]
public function insert(Request $request)
{
$domain = Config::get('url.gcr_api'); // gcr_api is defined in app/config/url.php
$url = $domain . "/api/v1/campaign/insert";
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$client = new Client;
$response = $client->request('POST', $url , [
'headers' => [
'X-XSRF-TOKEN' => csrf_token(),
],
'form_params' => [
'name' => $campaign_name,
'bank_id' => $campaign_provider,
]
]
);
$data = json_decode($response->getBody(), true);
return $data;
}
}
这里是上面方法调用的流明api的代码
public function insert(Request $request) {
try {
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
DB::table('campaign')->insert($data);
$response = array(
'status' => 'success',
'message' => 'Campaign created successfully',
);
return response()->json($response);
}
catch(Exception $e) {
// When query fails.
$response = array(
'status' => 'failed',
'message' => 'Failed to create campaign',
);
return response()->json($response);
}
}
每次调用我的 laravel 应用程序控制器的插入方法时,我都会收到此错误:
GuzzleHttp \ Exception \ ServerException (500) Server error:
POST http://localhost:8000/api/v1/campaign/insert
resulted in a500 Internal Server Error
response:
我认为错误与我的 lumen api 无法获取 form_params 数据有关,所以我在我的 lumen api 代码中注释掉了这段代码并且错误消失:
/*$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
$data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
DB::table('campaign')->insert($data); */
但是我需要在我的 lumen api 中获取 form_params 数据,我该怎么做?
你的假设部分正确,它可以访问form_params,但你尝试获取的form_params与实际参数不同:
为了传递参数,您使用以下数组:
'form_params' => [
'name' => $campaign_name,
'bank_id' => $campaign_provider,
]
此数组将使用键 'name' 将值设置为 $campaign_name
,将 $campaign_provider
设置为 bank_id
。到目前为止这段代码没有任何问题。
然而,在您的 API 中,您执行以下操作:
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
但是没有键 campaign_name
或 campaign_provider
,因为它们已更改为 name
和 bank_id
。因此,如果您将其更改为以下内容,它应该可以工作:
$campaign_name = $request->input('name');
$campaign_provider = $request->input('bank_id');