php this validate,php扩展ZF——Validate扩展

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;

}

}

?>

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

相关文章

1a1b05c64693fbf380aa1344a7812747.png

本文给大家分享的是个人对于PHP编码转换问题的理解以及处理方法,非常的简单实用,有需要的小伙伴可以参考下。2015-07-07

4f55910a645b073bc4fc65dc10dc14bd.png

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

0ea3c7666119d5615e582f823fb3fad6.png

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

4f96a78db829b1556ff16de21e013c7a.png

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

8cc1031babc6aff2319f1c6af8544aa0.png

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

0c932a99bb7b6f23c937db507070cc7b.png

这篇文章主要为大家详细

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

cca732bf65a93ed2ec0ac80c638460fe.png

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

2d9f31f2af7b675a3d153d2b7f1035a7.png

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

b452cee8ec5cd9e58ab98eba17281e59.png

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

f4838ec7e2d4da28e0b57d4e852dadd4.png

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

最新评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈数据结构-选择排序(简单、堆排序)

选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 选择排序正如定义所讲,在数组查询出最小值,然后放在此次循环开始位置(前一次循环已经获取比它更…

安装php7的mysql扩展,php7安装mysql扩展的方法是什么

php7安装mysql扩展的方法:1、下载mysql扩展并解压;2、使用phpize工具初始化并进行configure;3、执行【make && make install】命令;4、编辑php.ini文件;5、重启服务。本文环境:windows10系统、php7…

iPhone屏幕尺寸、分辨率及适配

目录(?)[-] iPhone尺寸规格单位inch英吋iPhone手机宽高屏幕尺寸像素密度PPI缩放因子scale factor between logic point and device pixel1Scale起源 2UIScreenscale 3UIScreennativeScale 4机型判别Resolutions Rendering2x3x以及高倍图适配12x 23x 3高倍图文件…

鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...

本文实例讲述了jQuery实现的响应鼠标移动方向插件用法。分享给大家供大家参考,具体如下:HTML代码如下:www.jb51.net jQuery响应鼠标移动*{margin:0;padding:0;}ul,li{list-style:none;}div{font-family:"Microsoft YaHei";}html,bo…

jitpack让使用第三方依赖库更简单

在开发过程中,使用第三方优秀依赖库是个很常见的问题,有的时候是maven,或者gradle, 或者sbt,大部分库工程,都会有对应的gradle,maven依赖代码,但是有的没有,尤其是使用的snapshot的依赖的时候,虽…

Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈。在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例。但由于提供的样例是使用Objective-C写的&…

linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标

这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu 12.04 等使用Unity作为默认桌面环境的发行版。在Unity桌面环境,程序启动器实际上以.desktop为后缀的文件的形式存储在电脑上,所以我们可…

htop linux命令详解,htop使用详解

在管理进程时通常要借助一些工具,比较常用的就是ps和top了;不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法。一、安装htophtop工具在epel源中提供,请自行配置epel源,也可以直接下载…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

linux解压war包乱码,linux中zip解压乱码解决方法

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。有2种方式解决问题:1、通过unzip行命令解压,指定字符集unzip -O …

Android沉浸式通知栏设计

转载博客:http://www.2cto.com/kf/201503/381348.html Android4.4新特性,系统状态栏一体化。 实现的步骤主要有以下几点: 1.android4.4 以上版本 2.设置app全屏: 方法:在AndroidManifest.xml中设置android:theme"…

linux火狐自动更新,CentOS 7手动更新firefox | Linux系统运维联盟

这里针对的是firefox无法检测到新版本,需要手动升级。1.下载新版的irefox,一般是.tar.gz压缩包。2.tar zxvf 解压到/usr/lib64 。(只要是原版firefox文件的目录就对了)3.cd /usr/lib64/firefox4../firefox-bin 完成有的更新好之后可能会无法播放视频&a…

Servlet的学习之Request请求对象(2)

在上一篇《Servlet的学习(十)》中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能。 使用HttpServletRequest可以防止盗链行为,什么是盗链行为,比如说在一个别的网站上超链接&#xf…

如何提高linux的时钟精度,Linux时钟精度提高有什么办法?

2 动态高精度时钟设计和实现动态高精度时钟设计方案借鉴了KURT-Linux思想,但与其不同的是提供一个与标准Linux核心时钟并行的具有精密刻度的实时时钟,并与原核心时钟区别开。采用X86体系CPU提供的TSC作为高精度的时间标度,权衡一定时间段(如一…

Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2. 代码示例: (1)SendThread.java,如下: 1 package com.himi.udpDemo2;2 3 import java.io.BufferedReader;4 import java.…

c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子

满意答案evil83752014.02.27采纳率:51% 等级:11已帮助:7590人#include int main(){int array[100], n, c, d, position, swap;printf("Enter number of elements\n");scanf("%d", &n);printf("Enter %d inte…

小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区

N个小球放入M个盒子共有多少种方法,并输出的算法设计:算法思路1 :暴力填充盒子每个小球都可能放入M个盒子的任意一个,所以直接根据小球个数做递归即可,然后将存储放入hash中排重//TODO算法思路2 :递归填充盒子即&#…

r语言c5.0要求因子输出,R语言中因子的创建与使用

原标题:R语言中因子的创建与使用因子在R语言中可以用来表示名义型变量或有序变量。名义变量一般表示类别,如性别,种族等等。有序变量是有一定排序顺序的变量,如职称,年级等等。在R语言中,名义变量和有序变量…

WinForm中使用AnyCAD三维控件 の 初始化

在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成。 一、添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation.Net.dll AnyCAD.Exchange.Net.dll 二、初始化控件 1.首先创建一个窗体 2.在窗体上放置一个Panel用来放置三维控件 3.初始…

android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!

原标题:你居然还不会手机usb调试?5个方法,让你轻松学会设置!最近有位朋友将手机连接电脑的时候,遇到了提示打开手机的USB调试模式,却不知道怎么操作。其实,不同手机的usb调试打开的方式都会有所…