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