#1 xuechu
如果规则里面有两个字段需要验证,但是当前只想验证其中一个字段,我做了如下修改(不知道是我自作聪明,还是JACK已有相应的调用方法),做个记号。规则:
"rules" => array(
'id' => array(
'notnull' => TRUE,
),
'email' => array(
'notnull' => TRUE,
'email' => true,
),
),
如我只想验证id,调用方法
spVerifier(array('id'=>$id),null,array('morerow'=>true));
修改验证类:
/core/spModel.php
public function __input(& $obj, $args){
//添加只验证规测里面的一项
$morerow=false;
if(isset($args[2]) && is_array($args[2])){if($args[2]['morerow'])$morerow=true;}
$this->verifier = (null != $obj->verifier) ? $obj->verifier : array();
if(isset($args[1]) && is_array($args[1])){
$this->verifier["rules"] = $this->verifier["rules"] + $args[1]["rules"];
$this->verifier["messages"] = isset($args[1]["messages"]) ? ( $this->verifier["messages"] + $args[1]["messages"] ) : $this->verifier["messages"];
}
if(is_array($obj->addrules) && !empty($obj->addrules) ){foreach($obj->addrules as $addrule => $addveri)$this->addrules($addrule, $addveri);}
if(empty($this->verifier["rules"]))spError("无对应的验证规则!");
return is_array($args[0]) ? $this->checkrules($args[0],$morerow) : TRUE; // TRUE为不通过验证
}
/**
* 按规则验证数据
*
* @param values 验证值
* @param morerow 添加只验证规测里面的一项
*/
private function checkrules($values,$morerow=false){
$this->checkvalues = $values;
foreach( $this->verifier["rules"] as $rkey => $rval ){
if($morerow && !isset($values[$rkey]))continue; //添加只验证规测里面的一项
$inputval = isset($values[$rkey]) ? $values[$rkey] : '';
foreach( $rval as $rule => $rightval ){
if(method_exists($this, $rule)){
if(TRUE == $this->$rule($inputval, $rightval))continue;
}elseif(null != $this->add_rules && isset($this->add_rules[$rule])){
if( function_exists($this->add_rules[$rule]) ){
if(TRUE == $this->add_rules[$rule]($inputval, $rightval, $values))continue;
}elseif( is_array($this->add_rules[$rule]) ){
if(TRUE == spClass($this->add_rules[$rule][0])->{$this->add_rules[$rule][1]}($inputval, $rightval, $values))continue;
}
}else{
spError("未知规则!");
}
$this->messages[$rkey][] = (isset($this->verifier["messages"][$rkey][$rule])) ? $this->verifier["messages"][$rkey][$rule] : "{$rule}";
}
}
// 返回FALSE则通过验证,返回数组则未能通过验证,返回的是提示信息。
return (null == $this->messages) ? FALSE : $this->messages;
修改完就可以,仍然可以使用原有参数调用,不影响!
请JACK老大看看,可不可行,谢过!
2010-08-28 05:41:38