Laravel 请求中使用 put 方法发送多维数组数据的问题

问题描述 投票:0回答:1

我正在使用 Laravel 并尝试使用以下代码向 API 发送 PUT 请求:

$client->put('api_nginx/v1/countries/' . $id . '/update', [
    'json' => $request->all(),
]);

请求中发送的数据($request->all())如下:

{
  "country_iso2": [
    "US",
    "NL"
  ],
  "url": [
    "https://example.com",
    "https://example.com"
  ],
  "wager": [
    null,
    null
  ],
  "minimum_withdrawal_time": [
    null,
    null
  ],
  "maximum_withdrawal_time": [
    null,
    null
  ],
  "payment_type_ids": [
    [
      "1",
      "3",
      "4"
    ],
    [
      "1",
      "2",
      "4",
      "5"
    ]
  ]
}

但是,我面临一个问题,即发出请求时未发送 payment_type_ids 字段。我认为问题是由于 payment_type_ids 是多维数组造成的。有趣的是,当我使用 Postman 时,该请求完美地工作。

有人可以帮助解释为什么多维数组导致 Laravel HTTP 客户端出现问题以及如何修复它吗?

laravel guzzle
1个回答
0
投票

出现此问题的原因是 Laravel HTTP 客户端 (

Http::put
) 自动将您发送的数据转换为 JSON 格式。当您包含像
payment_type_ids
这样的多维数组时,Laravel 依赖 PHP 的
json_encode()
函数来处理转换。

为了确保数据格式正确并按预期发送,请将数据显式编码为 JSON 并指定

Content-Type
标头

$client->put('api_nginx/v1/countries/' . $id . '/update', [
    'headers' => [
        'Content-Type' => 'application/json',
    ],
    'body' => json_encode($request->all()),
]);

带走积分

  1. 显式编码:使用
    json_encode()
    确保嵌套数组正确编码。
  2. Headers:将
    Content-Type
    标头设置为
    application/json
    以告知服务器数据格式。
  3. Body 参数:将 JSON 编码的数据作为
    body
    参数而不是
    json
    传递。使用
    json
    自动对数据进行编码,但使用
    body
    显式编码可以为您提供更多控制。
© www.soinside.com 2019 - 2024. All rights reserved.