Laravel中的Guzzle Post Null / Empty值

时间:2019-01-23 18:01:17

标签: laravel laravel-5 guzzle

我一直在尝试与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以外的所有东西。谢谢!

2 个答案:

答案 0 :(得分:1)

昨天我遇到了这个问题,您的问题在Google上的排名很高。可惜没有答案。

这里的问题是form_params在后​​台使用http_build_query(),并且如this user contributed note中所述,该函数的输出中不存在空参数。

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

注意:这两个键分别作为常量GuzzleHttp\RequestOptions::JSONGuzzleHttp\RequestOptions::MULTIPART

答案 1 :(得分:0)

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