嗨,我的一个应用程序模型的 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;
看起来您的比较是根据其工作方式向后进行的。 如果你把'>'
翻到'<'
会怎样?