@@ -266,17 +266,57 @@ private function normalizeFiles(array $files): array
266
266
continue ;
267
267
} elseif (!isset ($ value ['tmp_name ' ])) {
268
268
$ normalized [$ key ] = $ this ->normalizeFiles ($ value );
269
- } elseif (\is_array ($ value ['tmp_name ' ])) {
270
- foreach ($ value ['tmp_name ' ] as $ k => $ v ) {
271
- $ file = $ this ->createStreamFromFile ($ value ['tmp_name ' ][$ k ], 'r ' );
272
- $ normalized [$ key ][$ k ] = $ this ->createUploadedFile ($ file , $ value ['size ' ][$ k ], $ value ['error ' ][$ k ], $ value ['name ' ][$ k ], $ value ['type ' ][$ k ]);
273
- }
274
269
} else {
275
- $ file = $ this ->createStreamFromFile ($ value ['tmp_name ' ], 'r ' );
276
- $ normalized [$ key ] = $ this ->createUploadedFile ($ file , $ value ['size ' ], $ value ['error ' ], $ value ['name ' ], $ value ['type ' ]);
270
+ $ normalized [$ key ] = $ this ->createUploadedFileFromSpec ($ value );
277
271
}
278
272
}
279
273
280
274
return $ normalized ;
281
275
}
276
+
277
+ /**
278
+ * Create and return an UploadedFile instance from a $_FILES specification.
279
+ *
280
+ * If the specification represents an array of values, this method will
281
+ * delegate to normalizeNestedFileSpec() and return that return value.
282
+ *
283
+ * @param array $value $_FILES struct
284
+ *
285
+ * @return UploadedFileInterface|UploadedFileInterface[]
286
+ */
287
+ private function createUploadedFileFromSpec (array $ value )
288
+ {
289
+ if (is_array ($ value ['tmp_name ' ])) {
290
+ return $ this ->normalizeNestedFileSpec ($ value );
291
+ }
292
+
293
+ $ file = $ this ->createStreamFromFile ($ value ['tmp_name ' ], 'r ' );
294
+ return $ this ->createUploadedFile ($ file , $ value ['size ' ], $ value ['error ' ], $ value ['name ' ], $ value ['type ' ]);
295
+ }
296
+
297
+ /**
298
+ * Normalize an array of file specifications.
299
+ *
300
+ * Loops through all nested files and returns a normalized array of
301
+ * UploadedFileInterface instances.
302
+ *
303
+ * @return UploadedFileInterface[]
304
+ */
305
+ private function normalizeNestedFileSpec (array $ files = []): array
306
+ {
307
+ $ normalizedFiles = [];
308
+
309
+ foreach (array_keys ($ files ['tmp_name ' ]) as $ key ) {
310
+ $ spec = [
311
+ 'tmp_name ' => $ files ['tmp_name ' ][$ key ],
312
+ 'size ' => $ files ['size ' ][$ key ] ?? null ,
313
+ 'error ' => $ files ['error ' ][$ key ] ?? null ,
314
+ 'name ' => $ files ['name ' ][$ key ] ?? null ,
315
+ 'type ' => $ files ['type ' ][$ key ] ?? null ,
316
+ ];
317
+ $ normalizedFiles [$ key ] = $ this ->createUploadedFileFromSpec ($ spec );
318
+ }
319
+
320
+ return $ normalizedFiles ;
321
+ }
282
322
}
0 commit comments