- 最后登录
- 2011-4-25
- 在线时间
- 3 小时
- 个人主页
- 注册时间
- 2010-8-26
- 阅读权限
- 10
- 帖子
- 7
- 精华
- 0
- UID
- 963

|
发表于 2010-8-28 05:41:38
|显示全部楼层
如果规则里面有两个字段需要验证,但是当前只想验证其中一个字段,我做了如下修改(不知道是我自作聪明,还是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老大看看,可不可行,谢过! |
|