]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавляем нормализацию
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 17 Oct 2025 12:57:19 +0000 (15:57 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 17 Oct 2025 12:57:19 +0000 (15:57 +0300)
erp24/jobs/SendRequestUploadDataToJob.php

index 497a35a3136fe14a46193d143fdd8481d283b02b..5e82b93b33210cf7a87b4af6556403485ef17852 100644 (file)
@@ -22,7 +22,7 @@ class SendRequestUploadDataToJob implements RetryableJobInterface
 
         try {
             // 1) Нормализуем вход к массиву
-            $request = $this->decodingResult;
+            $request = $this->normalizeToArray($this->decodingResult);
 
             // 2) Базовая валидация (добавьте обязательные ключи, если знаете)
             if (!is_array($request) || $request === []) {
@@ -67,6 +67,36 @@ class SendRequestUploadDataToJob implements RetryableJobInterface
         return $attempt < 3;
     }
 
+    /**
+     * Приводит произвольный input к массиву.
+     * Поддерживает: array, stdClass/объект, JSON-строку.
+     */
+    private function normalizeToArray($data): array
+    {
+        if (is_array($data)) {
+            return $data;
+        }
+
+        if ($data instanceof \JsonSerializable) {
+            $data = $data->jsonSerialize();
+            return is_array($data) ? $data : [];
+        }
+
+        if (is_object($data)) {
+            // грубая, но надёжная нормализация объекта к array
+            return json_decode(json_encode($data, JSON_UNESCAPED_UNICODE), true) ?: [];
+        }
 
+        if (is_string($data)) {
+            // возможно это JSON
+            $decoded = json_decode($data, true);
+            if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
+                return $decoded;
+            }
+        }
+
+        // null / scalar и т.п. → пустой массив
+        return [];
+    }
 
 }