0

嗨,我的一个应用程序模型的 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”)

感谢您阅读我,并为我的近似英语感到抱歉。

祝你有美好的一天 :)

迈克尔

4

2 回答 2

1

谢谢大家的回答。

实际上这是我做的一个转储错误。

我不知道 save() 方法调用了 validate() 方法。实际上我试图保存一个用户,但我不明白为什么我的 CustomUser 模型中的规则没有运行 - _ -。

测试是在我的 User:rules() 上进行的,而我的 CustomUser::rules() 继承了我的 User::rules() ...无论如何我都这样解决了这个问题。

if(myCustomUser->validate()){

我的用户 = 新用户;

……

我的用户->保存(假);

}

像这样,我可以使用我的 CustomUser 的验证规则创建一个用户。

谢谢,祝你有美好的一天:)

于 2012-11-20T12:43:55.620 回答
-1

听起来您的值之间的比较没有按预期工作。

根据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;

根据其工作方式,您的比较似乎是倒退的。如果你翻转你的'>'to会发生什么'<'

于 2012-11-20T01:35:42.100 回答