Yii模型rules()方法不起作用

时间:2012-11-19 17:07:04

标签: php validation yii yii-validation

我的应用程序模型之一的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 个答案:

答案 0 :(得分:1)

谢谢大家的回答。

实际上这是我犯的转储错误。

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

测试在我的User:rules()上,我的CustomUser :: rules()继承了我的User :: rules()......无论如何我修复了这个问题。

  

if(myCustomUser-> validate()){

     

myUser =新用户;

     

......

     

myUser->保存(假);

     

}

就像我可以使用CustomUser的验证规则创建用户。

谢谢,祝你有愉快的一天:)

答案 1 :(得分:-1)

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

根据CCompareValidator.php file

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;

根据其工作方式看起来您的比较是倒退的。如果您将'>'翻转为'<'会怎样?