php扩展ZF——Validate扩展

更新时间:2008年01月10日 20:27:49   作者:

php扩展ZF——Validate扩展

之前写了一片文章关于如何在ZF0.6版本下扩展ZF的。这篇应该说是类似的文章,但环境换成ZF1.0RC1版本了。

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

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

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";

}

}

?>

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

$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编码转换问题的理解以及处理方法,非常的简单实用,有需要的小伙伴可以参考下。2015-07-07

最近做一个网页小偷程序的时候才发现file_get_content已经完全不能满足需求了。我觉得,在读取远程内容的时候,file_get_content除了使用比curl便捷以外,其他都没有curl好2014-05-05

这篇文章主要介绍了PHP过滤黑名单关键字的方法,通过保存过滤关键字到txt文件,再读取txt文件内容进行正则匹配替换来实现过滤功能,需要的朋友可以参考下2014-12-12

今天小编就为大家分享一篇关于在PHP中输出JS语句以及乱码问题的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-02-02

以下是对php中的strrpos函数与strripos函数的用法进行了详细的介绍,需要的朋友可以过来参考下2013-08-08

这篇文章主要为大家详细

介绍了php图像验证码的生成代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06

ExtJS与PHP、MySQL实现存储的方法,需要的朋友可以参考下,里面有详细的步骤。2010-04-04

array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替2011-11-11

今天想提一下如何配置PHPMyAdmin,因为在开发者,是比较普遍用到的。2009-05-05

这篇文章主要介绍了PHP程序设计中的MVC编程思想,对于深入理解MVC程序设计思想有一定的帮助,需要的朋友可以参考下2014-07-07

最新评论

php this validate,php扩展ZF——Validate扩展相关推荐

  1. 【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

    文章目录 一.扩展静态方法示例 二.扩展实例方法示例 三.扩展实例方法与扩展静态方法代码相同 一.扩展静态方法示例 在上一篇博客 [Groovy]Groovy 扩展方法 ( Groovy 扩展方法引入 ...

  2. 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 )

    文章目录 一.Groovy 扩展方法引入 二. 分析 Groovy 中 Thread 类的 start 扩展方法 一.Groovy 扩展方法引入 Groovy 可以对 JDK 中的一些类进行 方法扩展 ...

  3. 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 扩展文件名格式 | 扩展文件下载存放地址 )

    文章目录 前言 一.当前 Google Play 上传 APK 文件现状 二.APK 扩展文件名格式 三.APK 扩展文件下载地址 四.博客资源 前言 2021年08月01日 之后 , Google ...

  4. 【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )

    文章目录 I . 扩展属性 总结 II . 扩展属性 定义格式 III . 扩展属性 标准示例 IV . 扩展属性 注意事项 V . 扩展属性 本质分析 VI . 扩展属性 代码示例解析 I . 扩展 ...

  5. IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项

    之前几篇博客介绍了IPv6的扩展头部,包括分片头部和路由头部.接下来介绍一下IPv6扩展头部以及扩展选项的内容,可能会有这样的疑问,有了扩展头部怎么还需要扩展选项?扩展选项是干嘛用的?本篇博客就介绍相 ...

  6. ubuntu所有php扩展php-7.0扩展列表

    ubuntu所有php扩展php-7.0扩展列表 sudo apt-get install php7.0-bcmath sudo apt-get install php7.0-bz2 sudo apt ...

  7. 存储器容量扩展——位扩展、字扩展

    存储器(二)--存储容量扩展 前言:(基本概念) 存储空间:CPU决定 存储器:用户需求决定(4G,8G)(8G的存储器1各芯片能否完成用户需求?如果不能完成,存储器由若干个芯片组成) 存储芯片:芯片 ...

  8. java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展

    java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展 public static void main(String[] args) {//整数扩展 进制 二进制0b 十进制 八进制0 十六进 ...

  9. 计组之存储系统:3、主存与CPU的链接(字扩展、位扩展、字位扩展、74LS138)

    3.主存与CPU的链接 思维导图 存储器芯片的输入输出信号 增加主存的存储字长-位扩展 增加主存的存储字数-字扩展 主存容量扩展-字位同时扩展 74LS138译码器 思维导图 存储器芯片的输入输出信号 ...

最新文章

  1. Linux shell脚本判断服务器网络是否可以上网
  2. 局部变量java6_java字节码-几种字符串局部变量用法的区别
  3. mybatis generator 属性详解
  4. 《精通javascript》5,6章复习(三)
  5. Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习...
  6. hexo的yelee主题修改文章正文颜色、正文字體大小
  7. python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)
  8. wxpython有哪些基本功能_用Python中的wxPython实现最基本的浏览器功能
  9. Wi-Fi 协议和数率?
  10. 数字图像处理课设图像的锐化_数字图像处理图像锐化处理.ppt
  11. 编译qt的oracle驱动,怎样编译Qt下的Oracle驱动
  12. 「代码随想录」746. 使用最小花费爬楼梯【动态规划】力扣详解!
  13. 由一次NoHttpResponseException异常,追究到Http长连接和短连接
  14. Scratch-Q版三国小人物角色素材分享,值得您的收藏!
  15. 我心中的微信小程序 韩俊强的博客
  16. 2020年注册电气工程师基础考试大纲:公共基础(供配电、发输变电相同)
  17. Ubuntu10.04使用HP LaserJetPro P1606dn
  18. 2022手机号段大全、归属运营商整理—2022.01.04更新(包含三大运营商)
  19. 字符替换 英文字符串单词个数统计 python123题解
  20. 亚信安全助手、杀毒软件卸载

热门文章

  1. python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解
  2. mysql datetime 后面带了很多0_面试官:MySQL 表设计要注意什么?
  3. 如何进入embl的ebi网站fasta3服务器,The EMBL-EBI bioinformatics web and programmatic tools framework...
  4. oracle数据库9i安装,Oracle 9i数据库服务器的安装和辅助软件安装教程
  5. pcl的初步使用(ROS)
  6. python离线安装依赖包_python离线安装外部依赖包的实现
  7. mysql 四种存储引擎
  8. C# Types Type Members
  9. 声笔双拼单字效率分析
  10. 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)