找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 321|回复: 0
打印 上一主题 下一主题

php扩展ZF——Validate扩展

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2018-2-14 09:24:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            之前写了一片文章关于如何在ZF0.6版本下扩展ZF的。这篇应该说是类似的文章,但环境换成ZF1.0RC1版本了。
     在开始ZF扩展之前,推荐先看看ZF手册中的一些命令规范(ZF推荐使用),同时希望读者对ZF有较好的理解。如果没有,可以先上PHPCHIAN的ZF版本详细了解,或者到phpeye查找相关资料。
      ZF的validator提供了强大的验证功能,但在实际的操作中还是过于烦琐。比如说验证邮件,是用ZF的代码如下
isValid($email)) {  
    // email appears to be valid  
} else {  
    // email is invalid; print the reasons  
    foreach ($validator->getMessages() as $message) {  
        echo "$message\n";  
    }  
}  
?>  
    有没有发现,还是很类似我们不使用ZF的验证方式。只不过ZF帮我们把邮件验证的细节封装好了。那么我们如何简化成这样效果呢?(下面是我扩展后的调用方式)
set_breakOnFailure(false);  
        $validate -> add('email',new Zend_Validate_EmailAddress(),'邮件地址不正确!');  
        $validate -> add('username',new Zend_Validate_StringLength(3,15),'用户名长度必须在3到15之间!\'%value%\'不满足条件');  
        $validate -> add('password',new Zend_Validate_StringLength(6,20),'密码长度必须在6到20之间!');  
        $validate -> add('password',new Phpbean_Validate_isEqual($_POST['repassword']),'两次输入密码不匹配');  
        $authcode = new Phpbean_Img_Code();  
        $validate -> add('yanxue8_authcode',new Phpbean_Validate_isEqual($authcode->authcode($_POST['yanxue8_authcode_mdcode'],'DECODE')),'验证码不匹配!');  
        if( !$validate -> validator($_POST) ){  
            error_page('注册失败',$validate->getMessageText());  
        }  
?>  
    用上面这种方式一方面代码清晰,另一方面也有利同意的出错处理。那么如何做到这样呢?
    关键是Phpbean_Validate这个类。
    其实实现起来很简单,Phpbean_Validate::add()方法是把一条条的验证规则加入进来。然后调用Phpbean_Validate::validator()来验证就OK了。
    具体实现步骤如下:
    首先,在zend的同级目录中增加一个phpbean文件夹,然后在里面增加一个Validator.php文件。
    然后,在validator.php文件加入Phpbean_Validate这个类的定义。注意(你可以修改成自己的文件名和路径名,但注意一定要和类的名称保持一致)。
    这里,我给出我的Phpbean_Validate类的实现过程,仅供参考。
_breakOnFailure = $value;  
    }  
    public function add($key,$validate,$message='',$breakOnFailure=''){  
        if( empty($breakOnFailure) ) $breakOnFailure = $this->_breakOnFailure;   
        $this->_fileds[] = array($key,$validate,$message,$breakOnFailure);  
        return $this;  
    }  
    public function validator($array = array()){  
        if(empty($array)) $array = $_POST;  
        if (is_array($this->_fileds)) {  
            foreach ($this->_fileds as $filed){  
                list($key,$validate,$message,$breakOnFailure) = $filed;  
                if(empty($key)){  
                    if(!$validate){  
                        $this->_message[][] = $message;  
                        if($breakOnFailure) break;   
                    }  
                    continue;  
                }  
                if(!empty($message)) $validate->setMessage($message);  
                if( !$validate->isValid($array[$key]) ){  
                    $this->_message[$key][] = $validate->getMessages();  
                    if($breakOnFailure) break;   
                }  
            }  
            if(!empty($this->_message))return false;  
            return true;  
        }  
        return true;  
    }  
    public function getMessage(){  
        return $this->_message;  
    }  
    public function getMessageText(){  
        $str = '';  
        foreach ($this->_message as $ms){  
            foreach ($ms as $m) $str .= $m[0]."\n";  
        }  
        return $str;  
    }  
}  
?>  
   另外你还可以直接扩展一些验证规则类。下篇我再详细说。
            
            
        
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户反馈
客户端