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")

感谢您阅读我,对不起我的大致英语。

祝你有美好的一天:)

米歇尔

谢谢大家的回答。

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

我不知道 validate() 方法是由 save() 方法调用的。实际上,我正在尝试保存一个用户,但我不明白为什么我的自定义用户模型中的规则没有运行-_-。

测试是在我的用户:规则()上进行的,我的自定义用户::规则(

)继承了我的用户::规则()...无论如何,我像那样解决了这个问题。

if(myCustomUser->validate()){

我的用户 = 新用户;

myUser->save(false);

}

这样,我可以使用自定义用户的验证规则创建一个用户。

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

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

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

看起来您的比较是根据其工作方式向后进行的。 如果你把'>'翻到'<'会怎样?