/** * Добавляем файлы и утраченные значения массива * fields после load модели * @param \common\models\Document $model * @return mixed */ protected function loadAttributes($model) { /** * Добавление недостающих значений поля fields. * Т.к. после load затираются значения массива, * не пришедшие с POST-данными. * Устранение несовершенства функции SetAttribute Yii2. */ $model->loadOptions(); /** * Проверяем наличие файлов в расширенных * "быстрых" полях. Прикрепляем их к соответсвующим * аттрибутам. */ $files = isset($_FILES['Document']['name']) ? array_keys($_FILES['Document']['name']) : null; if ($files) { foreach ($files as $file) { if (in_array($file, Template::getOptionArray('file'))) { $model->{$file} = UploadedFile::getInstance($model, $file); } } } /** * Проверяем наличие файлов в дополнительных * полях. Прикрепляем их к соответствующим аттрибутам * (в соответствующее значение массива fields) */ $field_files = isset($_FILES['Document']['name']['fields']) ? $_FILES['Document']['name']['fields'] : null; // Если пришли POST-данные дополнительных полей if ($field_files) { // Перебираем все дополнительные поля foreach ($field_files as $option_id => $option) { // Если пришел заполненный аттрибут // file дополнительного поля if (isset($option['file'])) { // Значений может быть несколько // (мультиполе), перебираем foreach ($option['file'] as $field_id => $file) { $model->fields[$option_id]['file'][$field_id] = UploadedFile::getInstance($model, 'fields[' . $option_id . '][file][' . $field_id . ']'); } } } } return $model; }