bash.org:

Следуй за мной:

twiby

Адовый чад кутежа и трэш в комплекте

Не сохраняет поля модели Yii

Пришло на ум: 12 сентября 2012


Наткнулся на траблу с сохранением с использованием AR в Yii

        public function actionProfile(){
            $user = User::model()->findByPk(Yii::app()->user->id);
            if($user === null) throw new CHttpException(403, 'access denied');
            
            if(isset($_POST['ajax']) && $_POST['ajax']==='user-form'){
               echo CActiveForm::validate($user);
               Yii::app()->end();
            }
            if(isset($_POST['User'])){
                    $user->attributes = $_POST['User'];
                    if($user->save()){
                        Yii::app()->user->setFlash('success', "Профиль обновлен");
                    }
            }
            
            $this->render('profile',array(
                'user' => $user
                )
            );
        }

Выглядит все это бодрячком, метод save() работает, ставится флеш. Но поля не обновляются, хоть убей.

Решение-костыль работало, но захотелось узнать что же я делаю не так

foreach($_POST['User'] as $name=>$value){
   $user->$name=$value;
}

Начал копать, пытаясь понять что же происходит этакое

$user->attributes = $_POST['User'];
                    var_dump($_POST['User']);
                    var_dump($user->attributes);

По ходу раскопок оказалось что модель CActiveRecord не полная - тоесть поля в базу добавлялись, а модель не перегенерировалась gii. Валидацию эта штука проходит, поскольку валидирует лишь те поля что прописаны в модели.


Solution: add new database fields to your AR-model or regenerate it using gii

Если мой пост помог вам сэкономить пару часов времени или показался полезным, думаю не лишним будет показать его друзьям через социальные сети или упомянуть в своем блоге.


Ваше мнение:

Имя
   другие статьи с тегом Yii Framework

Случайная мысль:

Кто раздувает пламя ссоры и ворочает головни, тот не должен жаловаться, если искры попадают ему в лицо.
Бенджамин Франклин
drcreazy © 2008-2012 all rights reserved