Сценарии при поиске и валидации AR

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
oleg
Сообщения: 58
Зарегистрирован: 2010.04.20, 09:19
Откуда: Россия, Воронеж

Сценарии при поиске и валидации AR

Сообщение oleg »

Как применить сценарий для поиска AR в таком случае:

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

    // код в контроллере
    public function actionEdit()
    {
        // передаём индификатор пользователя и сценарий
        $user = Users::model()->getUser(Yii::app()->user->getState('user_id'), 'edit');
        // ...
        if( isset($_POST['Users']) )
        {
            $user->attributes = $_POST['Users'];
            if( $user->update() )
            {
                //...
            }
            //...
        }
    }
 

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

    // Код AR
    public function getUser($user_id, $scenario = '')
    {
        if( !empty($scenario) )
        {
            $this->setScenario($scenario);
        }

        $criteria = new CDbCriteria();
        $criteria->condition = 't.user_id = :user_id';
        $criteria->with = array('userinfo');
        $criteria->params = array(
            ':user_id' => $user_id,
        );

        return $this->find($criteria);
    }
 
Для определенных полей установлены правила валидации при сценарии edit, но они не срабатывают, и update всегда возвращает true.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Сценарии при поиске и валидации AR

Сообщение slavcodev »

так тоже не работает?

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

if( $user->->setScenario('edit')->update())
{} 
кстати по умолчанию уже задействованы сценарии, при сохранении новой записи это сценарий 'insert', при сохранении существующей это 'update'
их и можно использовать в правилах валидации
Жду Yii 3!
oleg
Сообщения: 58
Зарегистрирован: 2010.04.20, 09:19
Откуда: Россия, Воронеж

Re: Сценарии при поиске и валидации AR

Сообщение oleg »

mc-bear
Не знал до этого про сценарии "по-умолчанию" :) А ваш способ выдаст ошибку, setScenario ничего не возвращает. И еще оказывается при update() не происходит валидации. Переделал вот так:

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

    // код в контроллере
    public function actionEdit()
    {
        // передаём индификатор пользователя и сценарий
        $user = Users::model()->getUser(Yii::app()->user->getState('user_id'), 'edit');
        // ...
        if( isset($_POST['Users']) )
        {
            $user->attributes = $_POST['Users'];
            $user->setScenario('edit');
            if( $user->validate() && $user->update() )
            {
                //...
            }
            //...
        }
    }
 
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Сценарии при поиске и валидации AR

Сообщение slavcodev »

oleg писал(а):И еще оказывается при update() не происходит валидации
лучше/удобнее всего использовать save() вместо insert() и update()
Жду Yii 3!
Dr0ID
Сообщения: 27
Зарегистрирован: 2010.04.04, 20:02
Откуда: Новосибирск
Контактная информация:

Re: Сценарии при поиске и валидации AR

Сообщение Dr0ID »

mc-bear писал(а):
oleg писал(а):И еще оказывается при update() не происходит валидации
лучше/удобнее всего использовать save() вместо insert() и update()
Вообще, save() выполняет валидацию и в зависимости от isNewRecord вызывает insert() или update().
Поэтому конструкция $model->validate() && $model->update() эквивалентна $model->save().
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Сценарии при поиске и валидации AR

Сообщение slavcodev »

Dr0ID писал(а):Вообще, save() выполняет валидацию и в зависимости от isNewRecord вызывает insert() или update().
Поэтому конструкция $model->validate() && $model->update() эквивалентна $model->save().
Спасибо за уточнение, поэтом я и написал что save удобнее, не было еще не одного случая когда мне понадобилось бы отдельно валидацию делать а потом сохранять!
Жду Yii 3!
zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

Re: Сценарии при поиске и валидации AR

Сообщение zibert02 »

mc-bear писал(а):
oleg писал(а):И еще оказывается при update() не происходит валидации
лучше/удобнее всего использовать save() вместо insert() и update()

я пытаюсь использовать сценарий save но не работает, приходится указывать 2 сценария insert и update
save точно есть?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Сценарии при поиске и валидации AR

Сообщение samdark »

Метод, не сценарий.
zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

Re: Сценарии при поиске и валидации AR

Сообщение zibert02 »

стандартные сценирии это insert, update, delete?
больше нет?
serzhiio
Сообщения: 60
Зарегистрирован: 2011.01.30, 14:09

Re: Сценарии при поиске и валидации AR

Сообщение serzhiio »

Подскажите по сценариям,
я так понимаю, что если нужен нестандартный сценарий, то его нужно задавать в явном виде через setScenario - это так?
Каков набор стандартный сценариев?
Ответить