In my laravel 5.7 app, I have a controller with the following method that sends a post request using GuzzleHttp\Client to my lumen api.
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;
}
}
Here is the code for the lumen api that is called by the above method.
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);
}
}
I am getting this error everytime the insert method of my laravel app controller is called:
GuzzleHttp \ Exception \ ServerException (500) Server error:
POST http://localhost:8000/api/v1/campaign/insert
resulted in a500 Internal Server Error
response:
I think the error has something to do with my lumen api not able to fetch form_params data, so I commented out this block of code in my lumen api code and error disappears:
/*$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); */
But I need to fetch the form_params data in my lumen api, how do I do that?
Your assumption is partially correct, it can access the form_params, but the form_params you try to get differ from the actual parameters:
In order to pass the paramters you use the following array:
'form_params' => [
'name' => $campaign_name,
'bank_id' => $campaign_provider,
]
This array will set the value to $campaign_name
with the key 'name', and $campaign_provider
to bank_id
. Nothing wrong with this code so far.
However in your API you do the following:
$campaign_name = $request->input('campaign_name');
$campaign_provider = $request->input('campaign_provider');
However no key campaign_name
or campaign_provider
is present, since these have been changed to name
and bank_id
. So if you change this to the following it should work:
$campaign_name = $request->input('name');
$campaign_provider = $request->input('bank_id');