Php Yii model rules()方法不';行不通

Php Yii model rules()方法不';行不通,php,validation,yii,yii-validation,Php,Validation,Yii,Yii Validation,我的一个应用程序模型的rules()方法有问题 以下是规则() (代码的格式很抱歉) 问题是: 我想测试“valid\u until\u formatted”是否大于“valid\u from\u formatted” 当我用错误的值提交表单时(有效值从大于vali直到),我收到一条错误消息,我可以在firebug上看到它,但这些值被插入到数据库中 但举例来说,若我尝试使用一个已经使用的用户名或少于6个字符的密码,那个么我就有一个错误,并且数据库中并没有创建任何内容 有人知道为什么这个规则不起作

我的一个应用程序模型的rules()方法有问题

以下是规则() (代码的格式很抱歉)

问题是: 我想测试“valid\u until\u formatted”是否大于“valid\u from\u formatted”

当我用错误的值提交表单时(有效值从大于vali直到),我收到一条错误消息,我可以在firebug上看到它,但这些值被插入到数据库中

但举例来说,若我尝试使用一个已经使用的用户名或少于6个字符的密码,那个么我就有一个错误,并且数据库中并没有创建任何内容

有人知道为什么这个规则不起作用吗(即使我收到错误消息)? (这是在格式化之前有效的格式,例如:“20121118”)

谢谢你阅读我的文章,对不起,我的英语水平不高

祝您愉快:)


Michael

听起来你的价值观之间的比较并不像预期的那样有效

根据:

case'>':
如果($valuemessage!==null?$this->message:Yii::t('Yii','{attribute}必须大于“{compareValue}”);
$this->addError($object,$attribute,$message,array('{compareAttribute}'=>$compareTo,{compareValue}'=>$compareValue));
}
打破

根据这种方式,您的比较似乎是反向的。如果您将
'>'
翻到
'会发生什么情况?谢谢大家的回答

事实上我犯了个大错

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

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

如果(myCustomUser->validate()){

myUser=新用户

myUser->save(false)

}

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


谢谢,祝您度过愉快的一天:)

我们可以看看您的rules()函数的其余部分吗?您是否返回$newRules或是否有任何其他处理?是的,可能是:-),但他的代码与他得到的代码不兼容。至少,他可以用自己的值运行if语句来仔细检查事情是否正常。你真的应该把自己的答案标记为正确。将另一个答案标记为正确将导致其他人认为比较是倒退的,而不是真正的问题(您使用的是两种不同的模型)
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'),
  );
}
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;