Пример #1
0
 /**
  * Добавляем файлы и утраченные значения массива
  * 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;
 }