2016-01-24 2 views
1

Можно ли сделать что-то подобное?yii2 передать переменную другой модели

модель:

class Model1 extends ActiveRecord { 

    public $contentUploadedFile; 
    ... 

    public function extract() { 
     ... (assign values from uploaded file content to Model attributes, e.g:) 
     $this->datum = $contentUploadedFile[1]; 
     ... 
    } 
} 

модель загрузки:

class UploadModel extends Model { 

    public $uploadedFiles; 

    public function rules() { 
     return [ 
      [['uploadedFiles'], 'file', 'extensions' => 'txt', 'checkExtensionByMimeType' => false, 'skipOnEmpty' => true, 'maxFiles' => 2], 
     ]; 
    } 
} 

контроллер загрузки:

class UploadController extends Controller { 
    ... 

    public function actionUpload() { 
     $model = new UploadModel; 

     if (Yii::$app->request->isPost && $model->validate()) { 
      $files = UploadedFile::getInstances($model, 'uploadedFiles'); 

      foreach ($files as $file) { 
       $t = new Model1; 
       $t->contentUploadedFile = file($file->tempName); 

       $t->extract(); 
       $t->save(); 
      } 
     } 

     return $this->render('upload', [ 
        'model' => $model, 
     ]); 
    } 
} 

, но он не работает (неопределенная переменная contentUploadedFile). Может быть, моя логика совершенно неверна. В целом, возможно ли передать значение другой модели, как-то подобное? Или это совершенно неверная логика? Было бы неплохо, если бы в Yii2 была встроенная функциональность, которая обрабатывала бы несколько созданных моделей, но не использовала бы форму и все же при правильной проверке. Есть что-то вроде этого? Спасибо.

+0

Что значит не работает. ошибка? ... не сохранить в db? .. сохранить неправильные данные? – scaisEdge

+0

undefined variable contentUploadedFile – user2511599

+0

У меня есть ответ. Я думаю, что вам не хватает $ this accessing contentUploadedFile ... $ this-> contentUploadedFile .. – scaisEdge

ответ

0

Попробуйте это первый шаг этот путь

class UploadController extends Controller { 
... 

    public function actionUpload() { 
     $model = new UploadModel; 

     if (Yii::$app->request->isPost && $model->validate()) { 
      $files = UploadedFile::getInstances($model, 'uploadedFiles'); 

      foreach ($files as $file) { 
       $t = new Model1; 
       $t->contentUploadedFile = file($file->tempName); 
       // first try local assigment when all work transfer the logic in the model extract() function 
       $t->dbfield1 = $t->contentUploadedFile->field1 
       $t->dbfield2 = $t->contentUploadedFile->field2    
       // $t->extract(); 
       // 
       if ($t->validate()) { 
       $t->save(); 
       } else { 
       // validation failed: $errors is an array containing error messages 
       $errors = $t->errors; 
       var_dump($errors); 
       } 

       if 
      } 
     } 

     return $this->render('upload', [ 
        'model' => $model, 
     ]); 
    } 
} 

для использования модели $ это передать атрибут

class Model1 extends ActiveRecord { 

    public $contentUploadedFile; 
    ... 

    public function extract() { 
     ... (assign values from uploaded file content to Model attributes, e.g:) 
     $this->datum = $this->$contentUploadedFile[1]; 
     ... 
    } 
} 
+0

первая попытка, работает локальная работа. затем изменил это в Model1: '$ this-> datum = $ this-> contentUploadedFile [1];' и он в основном работает (так много спасибо за это), но я не получаю 'var_dump ($ errors);' и я могу загрузите только один из двух файлов. Как я могу сделать 'var_dump ($ errors),' visible? – user2511599

+0

Я не понимаю ... объясните, пожалуйста, лучше. – scaisEdge

+0

Есть 2 файла, которые я пытаюсь загрузить, и только один успешно. но я не вижу сообщение об ошибке, почему второе не проверяет. не могли бы вы мне помочь? А также было бы неплохо узнать, как заставить его работать, а затем вставить все в db, когда все проверяет. Если какой-либо из них терпит неудачу, ни один из них не вставлен. – user2511599

Смежные вопросы