Метод правил модели Yii() не работает

Привет, у меня проблема с методом rules() одной из моих моделей приложений.

Вот правила():

public function rules() 
{ 
  $newRules = array(
    array('password_verification', 'required'),
    array('password_verification', 'length', 'min'=>6, 'max'=>32),
    array('password', 'compare', 'compareAttribute'=>'password_verification'),
    array('username, email', 'length', 'min'=>3,'max'=>255),
    array('password', 'length','min'=>6, 'max'=>32),
    array('username, email', 'unique'),
    array('email', 'email'),
    array('valid_until_formated','compare', 
          'compareAttribute'=>'valid_from_formated','operator'=>'>'),
    array('id, type,username, password, password_verification, email, valid_from, valid_until, valid_until_formated, valid_from_formated, added_on, created_by','safe'),
  );
}

(извините за формат кода).

И вот проблема:

Я хочу проверить, больше ли значение valid_until_formated, чем значение valid_from_formated.

Когда я отправляю форму с неправильными значениями (valid_from больше, чем vali_ until), я получаю сообщение об ошибке, я вижу его в firebug, но значения вставляются в базу данных.

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

Кто-нибудь знает, почему это правило не работает (даже если я получаю сообщение об ошибке)? (это формат valid_until_formated, например: 20121118)

Спасибо, что читаете меня и извините за мой приблизительный английский.

Хорошего дня :)

Майкл


person Michaël    schedule 19.11.2012    source источник
comment
Можем ли мы увидеть остальную часть вашей функции rules()? Вы возвращаете $newRules или есть какая-то другая обработка?   -  person ernie    schedule 20.11.2012


Ответы (2)


Спасибо вам всем за ваш ответ.

На самом деле это была ошибка дампа, которую я сделал.

Я не знал, что метод validate() вызывается методом save(). На самом деле я пытался сохранить пользователя и не понимал, почему правила в моей модели CustomUser не выполнялись -_-.

Тест был на моем User:rules(), и мой CustomUser::rules() наследует мой User::rules()... Во всяком случае, я исправил эту проблему таким образом.

если(myCustomUser->проверить()){

мой пользователь = новый пользователь;

... ...

мой пользователь-> сохранить (ложь);

}

Таким образом, я могу создать пользователя с правилами проверки моего CustomUser.

Спасибо хорошего дня :)

person Michaël    schedule 20.11.2012
comment
Вы действительно должны отметить свой ответ как правильный. Пометка другого ответа как правильного приведет к тому, что другие будут думать, что сравнение является обратным, а не реальной проблемой (вы использовали две разные модели) - person ernie; 20.11.2012

Похоже, сравнение между вашими значениями работает не так, как ожидалось.

Согласно файлу CCompareValidator.php:

case '>':
    if($value<=$compareValue)
    {
            $message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be greater than "{compareValue}".');
            $this->addError($object,$attribute,$message,array('{compareAttribute}'=>$compareTo,'{compareValue}'=>$compareValue));
    }
    break;

Похоже, ваше сравнение обратное в зависимости от того, как это работает. Что произойдет, если вы перевернете '>' на '<'?

person acorncom    schedule 20.11.2012
comment
Да, может быть :-) Но его код не работает с тем, что у него есть. По крайней мере, он может запустить этот оператор if со своими значениями, чтобы перепроверить, работает ли что-то. - person acorncom; 20.11.2012