@acv56

Как перенести код из контроллера в модель?

Здравствуйте. Есть контроллер на Yii2:

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

	if ($model->load(Yii::$app->request->post())) {
		$model->files 			= UploadedFile::getInstance($model, 'image');
			
		if ($model->validate()) {
		
			if ($model->files) {
				$name 			= $model->files->baseName . '.' . $model->files->extension;
				$path			= Yii::getAlias('@webroot' . '/uploads/') . $name;
				$model->files->saveAs($path);
				$model->image 	= $name;
					
				if($model->removeImage) {
					$fileRemove 	= Yii::getAlias('@webroot' . '/uploads/') . $image;
					if(file_exists($fileRemove)) {
						unlink($fileRemove);
						$model->image 	= '';
					}
				}
			}

			$model->save();
			return $this->redirect(['view', 'id' => $model->id]);		
		}
		
		
	} 
	
	else {
		return $this->render('update', [
			'model' 			=> $model,
		]);
	}

}


В модели определил свойства:

public $files;
public $removeImage;


Там еще есть rules, и т.п.
Все работает, но у меня все контроллеры получаются толстые. Я хочу перенести код в модель, чтобы сделать тонкие контроллеры. Какие участки кода туда можно перенести и как вызвать в контроллере?
Нужно ли туда переносить из контроллера такое? :
Article::findOne($id)
Article::find()->where(['id' => $id])->all();
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
@SharuPoNemnogu
не язык плохой, программисты такие...
public function actionUpdate($id)
{
    $model = $this->findModel($id);
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $model->save();
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', ['model' => $model]);
    }
}

вот это оставить, все остальное в модель в beforeSave()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bitver
@bitver
Перекинули внешние данные в модель, взяли данные из неё и передали в представление. Это все займет 4-5 строк.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы