У меня есть форма регистрации, которая позволяет пользователям вводить либо их адрес электронной почты, либо номер телефона в поле формы email_or_phone
. Я написал функцию проверки, которую я использовал в функции rules()
, чтобы гарантировать, что представленное значение является действительным адресом электронной почты или телефона. Затем значение присваивается правильному атрибуту модели в функции afterValidation()
.yii CUniqueValidator указать сравнительный атрибут
Моя проблема заключается в том, что атрибуты модели email
и phone
должны быть уникальными. Я написал функцию afterValidation()
для проверки уникальности в отношении соответствующего столбца таблицы. Но код не работает. Ниже моя afterValidation()
функция:
protected function afterValidate(){
parent::afterValidate();
if(!$this->hasErrors() && $this->isNewRecord){
$validator = new CEmailValidator;
if($validator->validateValue($this->email_or_phone)){
$validator = new CUniqueValidator;
$validator->attributeName = 'email';
$validator->validate($model, 'email_or_phone');
if(!$this->hasErrors()) $this->email = $this->email_or_phone;
}else{
$validator = new CUniqueValidator;
$validator->attributeName = 'phone';
$validator->validate($model, 'email_or_phone');
if(!$this->hasErrors()) $this->phone = $this->email_or_phone;
}
}
}
Что я делаю неправильно?
Вы можете использовать вместо Yii встроен уникальный валидатор. Ссылка: http://www.yiiframework.com/doc/api/1.1/CUniqueValidator –