count (): параметр должен быть массивом или объектом, который реализует счетную при ошибке LINE 428 в PHP - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь сохранить некоторые данные в API, но я получаю эту ошибку. count (): Параметр должен быть массивом или объектом, который реализует Countable в LINE 428,, API публикует API данные, принимающие массив объектов, но в моих данных дочерняя переменная выбрасывает вышеуказанную ошибку ..

Пожалуйста, помогите?

$children = '[{"child_name" => "Mmansa" , "child_dob" => "jdhjdhjd" }]'; 

$data = [
      'quote_id' => $quote,
      'country_residence' => $resd,
      'physical_address' => $physical,
      'children' => $children,
];

Сообщение через Curl

$res = $this->global_Curl($data, 'api/travel/save-policy-meta');

Функция скручивания

 public function global_Curl($data, $url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, (env('API_ENDPOINT_NGINX_IP') . '/' . $url));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
        $response = json_decode(curl_exec($ch));
        curl_close($ch);
        return $response;
    }

Данные, необходимые для API

{
"quote_id":136,
"country_residence":"Japan",
"physical_address":"Tokyo",
"children":[
    {"child_name":"abc","child_dob":"23-05-2015"}
  ]
}

1 Ответ

0 голосов
/ 20 ноября 2018

Вашему API необходим запрос JSON, который вы отправляете в виде массива в CURLOPT_POSTFIELDS, а также содержит одно поле в качестве недопустимой строки JSON

Эта строка не является допустимой JSON

'[{"child_name" => "Mmansa" , "child_dob" => "jdhjdhjd" }]'

Предполагается, что это так

'[{"child_name" : "Mmansa" , "child_dob" : "jdhjdhjd" }]'

Здесь не нужно писать строку JSON, вместо этого вы можете использовать метод json_encode () для преобразования массива в строку JSON

Измените это

$children[] = ["child_name" => "Mmansa" , "child_dob" => "jdhjdhjd"]; 

$data = [
  'quote_id' => $quote,
  'country_residence' => $resd,
  'physical_address' => $physical,
  'children' => $children,
];

И попробуйте этот код

public function global_Curl($data, $url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, (env('API_ENDPOINT_NGINX_IP') . '/' . $url));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
    $response = json_decode(curl_exec($ch));
    curl_close($ch);
    return $response;
}
...