php扩展Zend Framework框架——Validate扩展

 更新时间:2022年09月29日 17:06:13   投稿:mdxy-dxy  
这篇文章介绍了php扩展Zend Framework框架,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

之前写了一片文章关于如何在Zend Framework框架0.6版本下扩展Zend Framework框架的。这篇应该说是类似的文章,但环境换成Zend Framework框架1.0RC1版本了。

     在开始Zend Framework框架扩展之前,推荐先看看Zend Framework框架手册中的一些命令规范(Zend Framework框架推荐使用),同时希望读者对Zend Framework框架有较好的理解。如果没有,可以先上PHPCHIAN的Zend Framework框架版本详细了解,或者到phpeye查找相关资料。

      Zend Framework框架的validator提供了强大的验证功能,但在实际的操作中还是过于烦琐。比如说验证邮件,是用Zend Framework框架的代码如下

<?php 

require_once 'Zend/Validate/EmailAddress.php'; 
$validator = new Zend_Validate_EmailAddress(); 
if ($validator->isValid($email)) { 
    // email appears to be valid 
} else { 
    // email is invalid; print the reasons 
    foreach ($validator->getMessages() as $message) { 
        echo "$message\n"; 
    } 

?> 

    有没有发现,还是很类似我们不使用Zend Framework框架的验证方式。只不过Zend Framework框架帮我们把邮件验证的细节封装好了。那么我们如何简化成这样效果呢?(下面是我扩展后的调用方式)

<?php 
$validate = new Phpbean_Validate(); 
        $validate -> 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类的实现过程,仅供参考。

<? 
class Phpbean_Validate{ 
     
    protected $_fileds =array(); 
     
    protected $_message = array(); 
     
    protected $_breakOnFailure = true; 
     
    public function set_breakOnFailure($value){ 
        $this->_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; 
    } 

?> 


   另外你还可以直接扩展一些验证规则类。下篇我再详细说。 

相关文章

  • php swoole多进程/多线程用法示例【基于php7nts版】

    php swoole多进程/多线程用法示例【基于php7nts版】

    这篇文章主要介绍了php swoole多进程/多线程用法,结合实例形式分析了基于php7nts版使用swoole进行多线程创建、调用相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • php跨域检测类允许部分域名访问的示例详解

    php跨域检测类允许部分域名访问的示例详解

    PHP跨域检测类是一种封装了跨域检测逻辑的PHP类,它可以用于在PHP应用程序中检测和处理跨域请求,以确保安全和正常的跨域通信,本文给出了示例给大家介绍php如何允许部分域名访问,需要的朋友可以参考下
    2023-12-12
  • PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析

    PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析

    这篇文章主要介绍了PHP配合fiddler抓包抓取微信指数小程序数据的实现方法,结合实例形式分析了PHP结合fiddler抓取微信指数小程序数据的相关原理与实现方法,需要的朋友可以参考下
    2020-01-01
  • PHP常用字符串函数用法实例总结

    PHP常用字符串函数用法实例总结

    这篇文章主要介绍了PHP常用字符串函数用法,结合实例形式总结分析了PHP常用字符串函数基本功能、用法及相关注意事项,需要的朋友可以参考下
    2020-06-06
  • php基于自定义函数记录log日志方法

    php基于自定义函数记录log日志方法

    这篇文章主要介绍了php基于自定义函数记录log日志方法,涉及php针对文件、目录及错误日志相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • php使用str_shuffle()函数生成随机字符串的方法分析

    php使用str_shuffle()函数生成随机字符串的方法分析

    这篇文章主要介绍了php使用str_shuffle()函数生成随机字符串的方法,结合两个简单实例形式分析了基于str_shuffle()函数的随机打乱字符串顺序功能实现随机字符串的相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • PHP数组在底层的实现原理详解

    PHP数组在底层的实现原理详解

    这篇文章讲给大家详细介绍一下PHP数组在底层的实现原理,PHP数组在底层的实现原理可以分为两种类型:基于哈希表的实现和基于有序列表的实现,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • php文件上传、下载和删除示例

    php文件上传、下载和删除示例

    这篇文章主要为大家详细介绍了php文件上传、下载和删除示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • php进行md5加密简单实例方法

    php进行md5加密简单实例方法

    在本文里小编给大家整理了一篇非常实用的php如何进行md5加密知识点内容,有需要的朋友们可以参考下。
    2019-09-09
  • PHP number_format() 函数定义和用法

    PHP number_format() 函数定义和用法

    number_format() 函数通过千位分组来格式化数字
    2012-06-06

最新评论