# Класс HttpSoft\UploadedFile\UploadedFileNormalizer

Нормализует структуру дерева загружаемых файлов, где каждый элемент массива является экземпляром Psr\Http\Message\UploadedFileInterface.

Исходный код на GitHub.

use HttpSoft\UploadedFile\UploadedFileNormalizer;

// Пример #1

print_r($_FILES);
/*
[
    'file' => [
        'name' => 'file.txt',
        'type' => 'text/plain',
        'tmp_name' => '/tmp/phpN3FmFr',
        'error' => UPLOAD_ERR_OK,
        'size' => 1024,
    ],
];
*/

print_r(UploadedFileNormalizer::normalize($_FILES));
/*
[
    'file' => `HttpSoft\UploadedFile\UploadedFile Object`,
];
*/

// Пример #2

/*
[
    'file_1' => [
        'name' => 'file.txt',
        'type' => 'text/plain',
        'tmp_name' => '/tmp/phpN3FmFr',
        'error' => UPLOAD_ERR_OK,
        'size' => 1024,
    ],
    'file_2' => [
        'name' => 'image.png',
        'type' => 'image/png',
        'tmp_name' => '/tmp/phpLs7DaJ',
        'error' => UPLOAD_ERR_OK,
        'size' => 98760,
    ],
];
*/

print_r(UploadedFileNormalizer::normalize($_FILES));
/*
[
    'file_1' => `HttpSoft\UploadedFile\UploadedFile Object`,
    'file_2' => `HttpSoft\UploadedFile\UploadedFile Object`,
];
*/

// Пример #3

print_r($_FILES);
/*
[
    'files' => [
        'name' => [
            'file_1' => 'file.txt',
            'file_2' => 'image.png',
        ],
        'type' => [
            'file_1' => 'text/plain',
            'file_2' => 'image/png',
        ],
        'tmp_name' => [
            'file_1' => '/tmp/phpN3FmFr',
            'file_2' => '/tmp/phpLs7DaJ',
        ],
        'error' => [
            'file_1' => 0,
            'file_2' => 0,
        ],
        'size' => [
            'file_1' => 1024,
            'file_2' => 98174,
        ],
    ],
];
*/

print_r(UploadedFileNormalizer::normalize($_FILES));
/*
[
    'files' => [
        'file_1' => `HttpSoft\UploadedFile\UploadedFile Object`,
        'file_2' => `HttpSoft\UploadedFile\UploadedFile Object`,
    ],
];
*/

// Пример #4

/*
[
    'files' => [
        'name' => [
            'data' => [
                'nested' => [
                    'file_1' => 'file.txt',
                    'file_2' => 'image.png',
                ],
            ],
        ],
        'type' => [
            'data' => [
                'nested' => [
                    'file_1' => 'text/plain',
                    'file_2' => 'image/png',
                ],
            ],
        ],
        'tmp_name' => [
            'data' => [
                'nested' => [
                    'file_1' => '/tmp/phpN3FmFr',
                    'file_2' => '/tmp/phpLs7DaJ',
                ],
            ],
        ],
        'error' => [
            'data' => [
                'nested' => [
                    'file_1' => UPLOAD_ERR_OK,
                    'file_2' => UPLOAD_ERR_OK,
                ],
            ],
        ],
        'size' => [
            'data' => [
                'nested' => [
                    'file_1' => 1024,
                    'file_2' => 98174,
                ],
            ],
        ],
    ],
];
*/

print_r(UploadedFileNormalizer::normalize($_FILES));
/*
[
    'files' => [
        'data' => [
            'nested' => [
                'file_1' => `HttpSoft\UploadedFile\UploadedFile Object`,
                'file_2' => `HttpSoft\UploadedFile\UploadedFile Object`,
            ],
        ],
    ],
];
*/

# Публичные методы

Данный класс имеет только один публичный статический метод.

# normalize

Преобразует каждое значение многомерного массива $files в экземпляр Psr\Http\Message\UploadedFileInterface.

public static function normalize(array $files = []): array;

Метод использует рекурсию, поэтому массив $files может быть любого уровня вложенности.

Все имена ключей в массиве $files будут сохранены.

Структура массива должна быть такой же, как и у глобального массива $_FILES.

Если указанно невалидное значение спецификации файла, будет брошено исключение \InvalidArgumentException.

Подробнее о структуре загружаемых файлов смотрите здесь.