уже не Баг =(

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
patriziaPePe
Сообщения: 2
Зарегистрирован: 2015.07.29, 13:31

уже не Баг =(

Сообщение patriziaPePe » 2015.07.29, 13:54

Здравствуйте, не давно столкнулся с такой проблемой ?
****************Model
#
#
#
#

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

public function rules() {
       return array(
            array('username,feedback_text', 'required', 'on' => 'update'),
            array('address_house,address_street', 'required', 'on' => 'update'), //проверяем только при этом сценарии 
        ............................
    array('address_house,address_street',safe.....)
   )
}


function lalala($_POST){
    $user = new User() //!!!!!!! Новый пользователь
    $user->setScenarion('tratata')
    $user->scenarion = 'tratata'
    $user->setAttributes($_POST); // В юзере все данные есть кроме  'address_house,address_street см rules
    if($user->save()){ //всё ок валидация проходит модель сейвит 
        .....
    }
    ...
    // а вот здесь смотрим
    if($user->validate()){ //мы получим False
     ибо что ??????????? см ниже 
    }
}



открываем наш любимый фреймворк path=framework/db/ar/CActiveRecord.php
и находим public function insert($attributes=null) <---- новая запись

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

public function insert($attributes=null)
    {
        if(!$this->getIsNewRecord())
            throw new CDbException(Yii::t('yii','The active record cannot be inserted to database because it is not new.'));
        if($this->beforeSave())
        {
            Yii::trace(get_class($this).'.insert()','system.db.ar.CActiveRecord');
            $builder=$this->getCommandBuilder();
            $table=$this->getMetaData()->tableSchema;
            $command=$builder->createInsertCommand($table,$this->getAttributes($attributes));
            if($command->execute())
            {
                $primaryKey=$table->primaryKey;
                if($table->sequenceName!==null)
                {
                    if(is_string($primaryKey) && $this->$primaryKey===null)
                        $this->$primaryKey=$builder->getLastInsertID($table);
                    elseif(is_array($primaryKey))
                    {
                        foreach($primaryKey as $pk)
                        {
                            if($this->$pk===null)
                            {
                                $this->$pk=$builder->getLastInsertID($table);
                                break;
                            }
                        }
                    }
                }
                $this->_pk=$this->getPrimaryKey();
                $this->afterSave();
                $this->setIsNewRecord(false);
[b]                $this->setScenario('update'); //<---------------wtf ???????????????
[/b]                return true;
            }
        }
        return false;
    }
а здесь смотрим ~ 1100 стр
$this->setScenario('update'); //<---------------wtf ???????????????
Насколько это нормальное поведение менять сценарий после инсерта в модели?
Последний раз редактировалось patriziaPePe 2015.07.29, 14:44, всего редактировалось 1 раз.

Аватара пользователя
SiZE
Сообщения: 2555
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Баг не Баг ?

Сообщение SiZE » 2015.07.29, 14:07

Ну если ты ознакомишься хоть чуть чуть с документацией, то ответишь на свой вопрос.

http://www.yiiframework.com/doc/api/1.1 ... ert-detail

patriziaPePe
Сообщения: 2
Зарегистрирован: 2015.07.29, 13:31

Re: Баг не Баг ?

Сообщение patriziaPePe » 2015.07.29, 14:43

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

Аватара пользователя
SiZE
Сообщения: 2555
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Баг не Баг ?

Сообщение SiZE » 2015.07.29, 15:35

patriziaPePe писал(а):Согласен не баг, но менять заранее определенные сценарии это как укусить пирожок с грушей в котором окажется яблоко...
использовать методы не читая доки, это как укусить пирожок с грушей и думать, что укусил с яблоком ;)

Ответить