Как проверить атрибуты перед вызовом метода save в CActiveRecord? - PullRequest
1 голос
/ 17 декабря 2011

Допустим, у меня есть модельный проект, а owner_id обозначает владельца проекта. При создании нового проекта пользователю необходимо ввести имя владельца вместо id. Я пишу метод для проверки, чтобы убедиться, что пользователь существует в системе, а затем я могу получить идентификатор пользователя. Правило:

 array('owner_name', 'userValidation')

Но я считаю, что проверка вызывается только тогда, когда выполняется приведенное ниже утверждение

 $model->save()

, что означает, что если я попытаюсь получить идентификатор пользователя, которого нет в системе, до сохранения с помощью операторов

 $model->validate();
 $user=User::model()->findByAttributes(array('username'=>$model->owner_name));
 $model->owner_id=$user->id;

будет исключение. Поэтому мой вопрос заключается в том, почему проверка не работает должным образом, когда я вызываю метод validate ()? Я проверил исходный код метода сохранения в Yii

 public function save($runValidation=true,$attributes=null)
    {
            if(!$runValidation || $this->validate($attributes))
                    return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
            else
                    return false;
    }

Я думаю, что это также пытается проверить с помощью вызова validate ().

1 Ответ

2 голосов
/ 17 декабря 2011

Вы не проверяли возвращаемое значение из validate (). Попробуйте что-то вроде этого:

if ($model->validate()) {
    $user=User::model()->findByAttributes(array('username'=>$model->owner_name));
    $model->owner_id=$user->id;
    /// ...
} else {
    // handle the case that userValidation failed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...