Добрый день!
Собираю уже 3 сайт на Yii, часть функционала уже успешно закопал в компоненты и не дублируюсь, но вот с картинками беда.
Сейчас делаю так:
public function actionUpdate($id)
{
$model = $this->findModel($id);
$currentData = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$image = UploadedFile::getInstance($model, 'image_name');
if ($image != null) {
if ($currentData->image_name)
ImagesController::deleteImage($currentData->image_name);
$model->image_name = ImagesController::saveImage($image);
} else {
$model->image_name = $currentData->image_name;
}
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('update', [
'model' => $model,
]);
}
Кому лень читать код:
Получаю данные, беру модель до сохранения, проверяю, есть ли фотка в файл инпуте, если есть - проверяю на старую, удаляю старую, заливаю новую, если нет, но есть уже фотка в бд - ставлю на место старую из модели до сохранения и заливаю обратно.
Вынес всю ответственность за сохранение и удаление в отдельный класс, но все равно приходится во всех моделях дублировать подобный код. Т.к. во-первых, изображение при Update пропадает (не стал делать хидден инпут), а во-вторых, перед обновлением получаю старые данные, которые уже есть в модели (можно заменить на clone - суть не изменится). Считаю все это корявой реализацией, т.к. постоянно везде копирую этот код (ладно если 1 модель с картинкой , а если их 10?)
Как правильно бы централизованно избавиться от этого всего и прекратить подобные извращения? Компонент? Реализовать отдельный роут под изображения?
Подскажите, пожалуйста:3