Сравнение $_POST с данными из старой записи (model)

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Сравнение $_POST с данными из старой записи (model)

Сообщение Catch »

Я решил сделать загрузку логотипа,и при его загрузке переименовывать в название (страницы). С этим у меня все хорошо, с удалением проблем тоже нету.. Но вот с обновлением вообще ничего не получается.

Как сделать такое: Если название страницы изменилось, а файл с картинкой загружен не был, то изменить название существующей картинки на название страницы

или хотябы

Как сравнить записи с данными, которые были получены из модели (при ее загрузке) типа update/id/1 с новыми данными, до ее сохранение (что то вроде $model->name != $_POST['page']['name'])

Что я только не пробывал:

Код: Выделить всё

$model = new Page;
if ($model->name != $_POST['Page']['name'] && $_POST['Page']['image']) // не получилось, а ведь $_POST['Page']['image'] содержит пустую строку,а название страницы я менял.....

$model = new Page;
$oldModel = $model; // почему то всегда возвращает данные из $model->name, даже если обращатся в теле условия
if ($model->save())
{
   // $model->name == $oldModel->name - почему?
}
пробовал и $_FILES['Page']['image']
 
На всякий случай - сохраняю так:

Код: Выделить всё

    public function actionCreate()
    {
        $model = new Manufacture;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Manufacture']))
        {
            $model->attributes=$_POST['Manufacture'];
            $model->img = CUploadedFile::getInstance($model,'image');
            
            if($model->save())
            {
                // загружаем картинку и изменяем ее.
                $file = Yii::getPathOfAlias('webroot.upload.manufactures').'/'.$model->image;
                $model->img->saveAs($file);
                
                Yii::app()->ih
                    ->load($file)
                    ->resize(310, 100, false)
                    ->save($file)
                ;
                $this->redirect(array('view','id'=>$model->id));
            }
        }

        $this->render('create',array(
            'model'=>$model,
        ));
    }
 

Код: Выделить всё

    public function beforeSave()
    {
        $this->alias = Translite::toTranslite($this->manufacture_name);
        if (isset($this->img))
            $this->image = $this->alias.'.'.$this->img->extensionName;
        return parent::beforeSave();
    }
 
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Re: Сравнение $_POST с данными из старой записи (model)

Сообщение Catch »

Решил проблему таким муторным способом

Код: Выделить всё

if(is_file($_FILES['Manufacture']['tmp_name']['image'])) 
Есть лучшее решение?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Сравнение $_POST с данными из старой записи (model)

Сообщение Nafania »

Если вам нужно узнать предыдущие данные после присваивания, то используйте beforeSave, типа

Код: Выделить всё

protected function beforeSave() {
if ( parent::beforeSave() ) {
$prevModel = self::model()->findByPk($this->getPrimaryKey());
if ( $model->name <> $prevModel->name ) {
....
}
}
} 
как-то так
Ответить