Метод правил 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_ до), я получаю сообщение об ошибке, я вижу его на firebug, но значения вставляются в базу данных.

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

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

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

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

Майкл

2 ответа

Решение

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

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

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

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

если (myCustomUser-> Validate ()) {

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

......

myUser-> сохранить (ложь);

}

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

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

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

Согласно файлу 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;

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

Другие вопросы по тегам