thinkphp的关于模型类里有一个自动验证的功能,即可以对提交的表单进行一定规则的验证,当我使用动态验证的时候就会报错
$rules = array(
array(array('pwd','name'),array($this,'checkPwd'),'密码格式不正确',2,'function') // 自定义函数验证密码格式);
);
$model= M('tmp');
if (!$model->validate($rules)->create()){ // 如果创建失败 表示验证没有通过 输出错误提示信息
exit($model->getError());
}else{
// 验证通过 可以进行其他数据操作
}
会报错!
在对多字段进行函数或回调方法的验证时会出现验证错误,错误原因是rules数组中验证规则中的某一数组的第一个元素为数组(在本例中为array("pwd","name"))时,由于trim()函数的参数不能是一个数组形式,而写成数组形式的参数就是作为参数传入这个trim()函数导致不符合要求所以会报错,所以改正后的代码如下:
文件位置:Thinkphp\Library\Think\Model.class.php (模型类的基类)1043行:autoValidation()函数体内:
原代码:
case self::VALUE_VALIDATE: // 值不为空的时候才验证
if('' != trim($data[$val[0]]))
if(false === $this->_validationField($data,$val))
return false;
break;
将代码改为:
case self::VALUE_VALIDATE: // 值不为空的时候才验证
if(is_string($val[0]) && strpos($val[0], ','))
$val[0] = explode(',', $val[0]);
if(is_array($val[0])){
// 支持多个字段验证
foreach($val[0] as $field){
if('' != trim($data[$field]))
if(false === $this->_validationField($data,$val))
return false;
}
}else{
if('' != trim($data[$val[0]]))
if(false === $this->_validationField($data,$val))
return false;
}
break;
最佳答案