Рассмотрим на примере.

Код контроллера:

Код:

public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if (Yii::$app->request->post()) {
            $model->img = UploadedFile::getInstance($model, 'img');
            if($model->img){
                $model->upload();
            }
            if ( $model->save()) {
                Yii::$app->session->setFlash('success', "Соперник {$model->name} добавлен");

                return $this->redirect(['view', 'id' => $model->id]);
            }
        }

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

Код модуля:

Код:

public function upload()
    {
        if($this->validate()){
            $path = Yii::getAlias('@webroot') . '/upload/store/Rivals/' . $this->img->baseName . '.' . $this->img->extension;
            $this->img->saveAs($path);
            return true;
        }else{
            return false;
        }
    }

По идее все правильно, загружаем картинку и сохраняем модель. Но не тут то было. Сохранение модели не проходит валидацию, в последствии чего фаил загружается но вылетает ошибка.

finfo_file(/home/users/s/starnetkhv/tmp/phpEk1Rtb): failed to open stream: Нет такого файла или каталога

и в бд ничего не вносится

Происходит это из-за того что валидировать уже нечего.

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