66
77use ArrayObject ;
88use InvalidArgumentException ;
9+ use Koriym \FileUpload \FileUpload ;
910use Override ;
1011use Ray \Di \Di \Named ;
1112use Ray \Di \Di \Qualifier ;
2223use function array_key_exists ;
2324use function assert ;
2425use function class_exists ;
26+ use function count ;
2527use function gettype ;
2628use function is_array ;
2729use function is_bool ;
4042use function substr ;
4143use function ucwords ;
4244
45+ use const UPLOAD_ERR_NO_FILE ;
46+
4347/**
4448 * @template T of object
4549 * @implements InputQueryInterface<T>
@@ -66,7 +70,6 @@ public function getArguments(ReflectionMethod $method, array $query): array
6670 return $ args ;
6771 }
6872
69-
7073 /**
7174 * @param class-string<T> $class
7275 * @param array<string, mixed> $query
@@ -88,7 +91,6 @@ public function create(string $class, array $query): object
8891 return $ reflection ->newInstanceArgs ($ args );
8992 }
9093
91-
9294 /** @param array<string, mixed> $query */
9395 private function resolveParameter (ReflectionParameter $ param , array $ query ): mixed
9496 {
@@ -112,7 +114,6 @@ private function resolveInputParameter(ReflectionParameter $param, array $query,
112114 $ type = $ param ->getType ();
113115 $ paramName = $ param ->getName ();
114116
115-
116117 // Handle union types (e.g., FileUpload|ErrorFileUpload)
117118 if ($ type instanceof ReflectionUnionType) {
118119 return $ this ->resolveUnionType ($ param , $ query , $ inputAttributes , $ type );
@@ -397,49 +398,49 @@ private function isFileUploadType(string $className): bool
397398 if (! class_exists ('Koriym\FileUpload\FileUpload ' )) {
398399 return false ;
399400 }
400-
401- return $ className === 'Koriym\FileUpload\FileUpload '
401+
402+ return $ className === 'Koriym\FileUpload\FileUpload '
402403 || $ className === 'Koriym\FileUpload\ErrorFileUpload '
403- || is_subclass_of ($ className , \ Koriym \ FileUpload \ FileUpload::class);
404+ || is_subclass_of ($ className , FileUpload::class);
404405 }
405406
406- /**
407- * @param array<string, mixed> $query
408- */
407+ /** @param array<string, mixed> $query */
409408 private function resolveFileUpload (ReflectionParameter $ param , array $ query ): mixed
410409 {
411410 $ paramName = $ param ->getName ();
412-
411+
413412 // Check if FileUpload is provided in query (for testing)
414413 if (array_key_exists ($ paramName , $ query )) {
415414 return $ query [$ paramName ];
416415 }
417-
416+
418417 // Try to create from $_FILES
419418 if (isset ($ _FILES [$ paramName ])) {
420419 $ fileData = $ _FILES [$ paramName ];
421-
420+
422421 // Check if no file was uploaded (UPLOAD_ERR_NO_FILE)
423422 if (isset ($ fileData ['error ' ]) && $ fileData ['error ' ] === UPLOAD_ERR_NO_FILE ) {
424423 if ($ param ->allowsNull () || $ param ->isDefaultValueAvailable ()) {
425424 return $ param ->getDefaultValue ();
426425 }
426+
427427 throw new InvalidArgumentException ("Required file parameter ' {$ paramName }' is missing " );
428428 }
429-
430- return \ Koriym \ FileUpload \ FileUpload::create ($ fileData );
429+
430+ return FileUpload::create ($ fileData );
431431 }
432-
432+
433433 // No file found
434434 if ($ param ->allowsNull () || $ param ->isDefaultValueAvailable ()) {
435435 return $ param ->getDefaultValue ();
436436 }
437-
437+
438438 throw new InvalidArgumentException ("Required file parameter ' {$ paramName }' is missing " );
439439 }
440440
441441 /**
442442 * @param array<string, mixed> $query
443+ *
443444 * @return array<array-key, mixed>
444445 */
445446 private function createArrayOfFileUploads (string $ paramName , array $ query ): array
@@ -448,15 +449,15 @@ private function createArrayOfFileUploads(string $paramName, array $query): arra
448449 if (array_key_exists ($ paramName , $ query ) && is_array ($ query [$ paramName ])) {
449450 return $ query [$ paramName ];
450451 }
451-
452+
452453 // Try to create from $_FILES
453- if (!isset ($ _FILES [$ paramName ])) {
454+ if (! isset ($ _FILES [$ paramName ])) {
454455 return [];
455456 }
456457
457458 $ arrayData = $ _FILES [$ paramName ];
458-
459- if (!is_array ($ arrayData )) {
459+
460+ if (! is_array ($ arrayData )) {
460461 return [];
461462 }
462463
@@ -467,9 +468,9 @@ private function createArrayOfFileUploads(string $paramName, array $query): arra
467468
468469 // Handle regular array format (each element is a complete file array)
469470 $ result = [];
470-
471+
471472 foreach ($ arrayData as $ key => $ fileData ) {
472- if (!is_array ($ fileData )) {
473+ if (! is_array ($ fileData )) {
473474 throw new InvalidArgumentException (
474475 sprintf (
475476 'Expected array for file upload at key "%s", got %s. ' ,
@@ -484,26 +485,28 @@ private function createArrayOfFileUploads(string $paramName, array $query): arra
484485 continue ;
485486 }
486487
487- $ result [$ key ] = \ Koriym \ FileUpload \ FileUpload::create ($ fileData );
488+ $ result [$ key ] = FileUpload::create ($ fileData );
488489 }
489490
490491 return $ result ;
491492 }
492493
493494 /**
494495 * Convert HTML multiple file upload format to individual file arrays
496+ *
495497 * @param array<string, mixed> $multipleFileData
498+ *
496499 * @return array<array-key, mixed>
497500 */
498501 private function convertMultipleFileFormat (array $ multipleFileData ): array
499502 {
500- if (!isset ($ multipleFileData ['name ' ]) || !is_array ($ multipleFileData ['name ' ])) {
503+ if (! isset ($ multipleFileData ['name ' ]) || ! is_array ($ multipleFileData ['name ' ])) {
501504 return [];
502505 }
503-
506+
504507 $ result = [];
505508 $ fileCount = count ($ multipleFileData ['name ' ]);
506-
509+
507510 for ($ i = 0 ; $ i < $ fileCount ; $ i ++) {
508511 $ fileData = [
509512 'name ' => $ multipleFileData ['name ' ][$ i ] ?? '' ,
@@ -512,15 +515,15 @@ private function convertMultipleFileFormat(array $multipleFileData): array
512515 'tmp_name ' => isset ($ multipleFileData ['tmp_name ' ]) && is_array ($ multipleFileData ['tmp_name ' ]) ? ($ multipleFileData ['tmp_name ' ][$ i ] ?? '' ) : '' ,
513516 'error ' => isset ($ multipleFileData ['error ' ]) && is_array ($ multipleFileData ['error ' ]) ? ($ multipleFileData ['error ' ][$ i ] ?? UPLOAD_ERR_NO_FILE ) : UPLOAD_ERR_NO_FILE ,
514517 ];
515-
518+
516519 // Skip files that weren't uploaded
517520 if ($ fileData ['error ' ] === UPLOAD_ERR_NO_FILE ) {
518521 continue ;
519522 }
520-
521- $ result [$ i ] = \ Koriym \ FileUpload \ FileUpload::create ($ fileData );
523+
524+ $ result [$ i ] = FileUpload::create ($ fileData );
522525 }
523-
526+
524527 return $ result ;
525528 }
526529
@@ -540,6 +543,7 @@ private function resolveUnionType(ReflectionParameter $param, array $query, arra
540543
541544 // Not a FileUpload union type, handle as regular parameter
542545 $ paramName = $ param ->getName ();
546+
543547 return $ query [$ paramName ] ?? $ this ->getDefaultValue ($ param );
544548 }
545549}
0 commit comments