Не сохранять определенный атрибут моделм

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Не сохранять определенный атрибут моделм

Сообщение Kirill »

Как при сохранении модели НЕ редактировать определенный атрибут?

$model->password мне обновлять не нужно. Как при $model->save(); не трогать свойство password?
Пробовал $model->password = false, не помогло.

Заполняется оно из формы: $model->attributes=$_POST['User'];

Сейчас работает так:

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

$tempPassword = $model->password;
$model->attributes=$_POST['User'];
$model->password = $tempPassword
;

Но решение - костыль. Надеюсь, что это как-то по-простому можно встроенным средствами решить :)
github profile: https://github.com/kirs
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение slavcodev »

вот как-то так, вообще в доку читать что такое сценарии

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

function rules()
{
  ....
   array('password','unsafe','on'=>'update'),
  ....
} 
Жду Yii 3!
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

Добавил это правило, теперь атрибут пустой - значение в БД стало обнуляться!
github profile: https://github.com/kirs
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение Ekstazi »

Надо чтоб оно грузилось с БД.
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

Ekstazi, как?
github profile: https://github.com/kirs
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение Ekstazi »

Ну CDbCriteria какой при загрузке модели ?
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

Я его не трогал в коде. Как-то так:

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

$model=User::model()->findByPk((int)Yii::app()->user->id);
$model->scenario = 'update';
        

if(isset($_POST['User']))
        {
            $model->attributes=$_POST['User'];

            if($model->save()) {
                Yii::app()->user->setFlash('user_updated','Изменения сохранены.');
                $this->refresh();
            }
        } 
И правило unsafe в модели, как подсказал mc-bear.
github profile: https://github.com/kirs
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение Ekstazi »

Хм, надо подумать. Я гляну, отпишусь завтра.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение slavcodev »

мда ( попробуй поиграться с порядком правила, поставь в начало, или в конец, может порядок имеет значение, не могу сейчас проверить сам.

PS: и еще после поиска find...() не нужно устанавливать сценарий update, он там по умолчанию, а при new Model по-умолчанию insert.
Жду Yii 3!
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение Ekstazi »

P.S2: mc_bear, как думаешь, может ли быть что unsafe валидатор ставит это св-во в null ?
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

С порядком поигрался, безрезультатно. ЧТо в начале, что в середине, что в конце :(
$model->scenario = 'update'; убрал.
github profile: https://github.com/kirs
zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

Сообщение zibert02 »

не пойму в чем проблема? пароль приходит из формы но при этом его не надо обновлять? тогда выкинуть поле пароль из формы
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re:

Сообщение Kirill »

zibert02 писал(а):не пойму в чем проблема? пароль приходит из формы но при этом его не надо обновлять? тогда выкинуть поле пароль из формы
Так любой пользователь сможет добавить <input name="User[attrubute]" ...> в код и редактировать значение в Бд, получается уязвимость.
Последний раз редактировалось Kirill 2011.01.12, 16:08, всего редактировалось 1 раз.
github profile: https://github.com/kirs
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение slavcodev »

покажи все rules из модели, наверняка атрибут password еще где-то устанавливается как safe
Жду Yii 3!
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

mc-bear писал(а):покажи все rules из модели, наверняка атрибут password еще где-то устанавливается как safe

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

public function rules()
    {
        return array(
            array('email, password, salt, group', 'unsafe', 'on'=>'update'),
            array('email', 'email'),
            array('email', 'unique', 'message'=>'Такой EMail уже зарегистрирован.'),
        );
    } 
github profile: https://github.com/kirs
Аватара пользователя
Kirill
Сообщения: 128
Зарегистрирован: 2010.08.28, 22:34

Re: Не сохранять определенный атрибут моделм

Сообщение Kirill »

Нашел в чем проблема, сам дурак.

В beforeSave() был старый кусок кода, который ставил $model->password = false;

Теперь работает.
github profile: https://github.com/kirs
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Не сохранять определенный атрибут моделм

Сообщение Ekstazi »

:-D А я то уже думал...
Ответить