/** * Test isMultidimensionalArray method */ public function testIsMultidimensionalArray() { $emptyArray = array(); $notMultidimensionalArray = array('foo', 'bar', 'var'); $multidimensionalArray = array('foo', 'bar' => array('var')); $this->assertEquals(false, ArrayUtil::isMultidimensionalArray($emptyArray)); $this->assertEquals(false, ArrayUtil::isMultidimensionalArray($notMultidimensionalArray)); $this->assertEquals(true, ArrayUtil::isMultidimensionalArray($multidimensionalArray)); }
/** * Note: If data is a multidimensional array, we have to flatten it before posting it, i.e., an array like: * * [ * key1: value1 * key2: [ * key2.1: value2.1 * key2.2: value2.2 * ] * key3: [ * key3.1: [ * key3.1.1: value3.1.1 * key3.1.2: value3.1.2 * ] * key3.2: value3.2 * ] * ] * * must become * * [ * key1: value1 * key2[key2.1]: value2.1 * key2[key2.2]: value2.2 * key3[key3.1][key3.1.1]: value3.1.1 * key3[key3.1][key3.1.2]: value3.1.2 * key3[key3.2]: value3.2 * ] * * Otherwise, curl is not able to perform the request and throws an error * * @param string $method * @param string $url * @param array $data * @param array $headers * @return mixed */ private function sendData($method, $url, $data, $headers) { // Set headers $this->setHeaders($headers); // Set template $this->setTemplate($method); // Flatten array if it is multidimensional if (ArrayUtil::isMultidimensionalArray($data)) { $data = ArrayUtil::flattenMultidimensionalArray($data); } // We have to post files and data separately $postData = array(); $files = array(); foreach ($data as $key => $value) { if ($value instanceof UploadedFile) { $files[$key] = $this->saveTemporaryFile($value); } else { $postData[$key] = $value; } } // Prepare the request $request = Request::$method($url); // Set fields data if (is_array($postData) && !empty($postData)) { $request->body($postData); } // Set files data if (is_array($files) && !empty($files)) { $request->attach($files); } // Perform the request $this->data = $request->send(); // Remove temporary files if (is_array($files) && !empty($files)) { foreach ($files as $file) { $this->removeTemporaryFile($file); } } }