我一直在尝试与Guzzle合作,并学习解决方法,但对于将请求与空值或null值结合使用感到有些困惑。
例如:
$response = $client->request('POST',
'https://www.testsite.com/coep/public/api/donations', [
'form_params' => [
'client' => [
'web_id' => NULL,
'name' => 'Test Name',
'address1' => '123 E 45th Avenue',
'address2' => 'Ste. 1',
'city' => 'Nowhere',
'state' => 'CO',
'zip' => '80002'
],
'contact' => [],
'donation' => [
'status_id' => 1,
'amount' => $donation->amount,
'balance' => $donation->balance,
'date' => $donation->date,
'group_id' => $group->id,
],
]
]);
运行测试后,我发现'web_id'
如果设置为NULL,则完全从我的请求中消失。我的问题是如何确保它可以与我的条件句一起使用?
在这一点上,如果我给$request->client
做点准备,我得到的只是web_id
以外的所有东西。谢谢!
答案 0 :(得分:1)
昨天我遇到了这个问题,您的问题在Google上的排名很高。可惜没有答案。
这里的问题是form_params
在后台使用http_build_query(),并且如this user contributed note中所述,该函数的输出中不存在空参数。
我建议您通过JSON正文(通过使用json
作为键而不是form_params
)或通过多部分(通过使用multipart
而不是form_params
来传递此信息)。
注意:这两个键分别作为常量GuzzleHttp\RequestOptions::JSON
和GuzzleHttp\RequestOptions::MULTIPART
答案 1 :(得分:0)
尝试在创建客户端之前定义form_params
,headers
或base_uri
之类的内容,因此:
// set options, data, params BEFORE...
$settings = [
'base_uri' => 'api.test',
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'ajustneedatokenheredontworry'
],
'form_params' => [
'cash' => $request->cash,
'reason' => 'I have a good soul'
]
];
// ...THEN create your client,
$client = new GuzzleClient($settings);
// ...and finally check your response.
$response = $client->request('POST', 'donations');
如果在要调用的控制器功能上选中$request->all()
,则应该看到已成功发送。