Рассмотрим на примере.
Код контроллера:
Код:
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: Нет такого файла или каталога
и в бд ничего не вносится
Происходит это из-за того что валидировать уже нечего.
Правильно будет сперва сохранить модель, а уже после загрузить файл.