Guzzle Post Null/Empty Laravel 中的值

Guzzle Post Null/Empty Values in Laravel

我一直在尝试使用 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,
        ],
    ]
]);

经过运行测试,我发现如果设置为NULL,'web_id'就完全从我的请求中消失了。我的问题是如何确保它在处理我的条件语句的请求中保持不变?

此时,如果我添加 $request->client,我得到的只是 web_id 以外的所有内容。谢谢!

我昨天 运行 讨论了这个问题,你的问题在 运行 Google 上很好地解决了。可惜没有答案。

这里的问题是 form_params 使用 http_build_query() under the hood and as stated in this user contributed note,函数输出中不存在空参数。

我建议您通过 JSON 正文(使用 json 作为键而不是 form_params)或通过多部分(使用 multipart 作为键)传递此信息form_params).

注意:这 2 个键可用作常量,分别为 GuzzleHttp\RequestOptions::JSONGuzzleHttp\RequestOptions::MULTIPART

尝试在创建客户端之前定义 form_paramsheadersbase_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(),您应该会看到已成功发送。

对于那些使用 laravel 的人,使用这个:

Http::asJson()