php扩展ZF——Validate扩展_php教程-查字典教程网
php扩展ZF——Validate扩展
php扩展ZF——Validate扩展
发布时间:2016-12-29 来源:查字典编辑
摘要:之前写了一片文章关于如何在ZF0.6版本下扩展ZF的。这篇应该说是类似的文章,但环境换成ZF1.0RC1版本了。在开始ZF扩展之前,推荐先看...

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

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

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

<?php

require_once'Zend/Validate/EmailAddress.php';

$validator=newZend_Validate_EmailAddress();

if($validator->isValid($email)){

//emailappearstobevalid

}else{

//emailisinvalid;printthereasons

foreach($validator->getMessages()as$message){

echo"$messagen";

}

}

?>

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

<?php

$validate=newPhpbean_Validate();

$validate->set_breakOnFailure(false);

$validate->add('email',newZend_Validate_EmailAddress(),'邮件地址不正确!');

$validate->add('username',newZend_Validate_StringLength(3,15),'用户名长度必须在3到15之间!'%value%'不满足条件');

$validate->add('password',newZend_Validate_StringLength(6,20),'密码长度必须在6到20之间!');

$validate->add('password',newPhpbean_Validate_isEqual($_POST['repassword']),'两次输入密码不匹配');

$authcode=newPhpbean_Img_Code();

$validate->add('yanxue8_authcode',newPhpbean_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类的实现过程,仅供参考。

<?

classPhpbean_Validate{

protected$_fileds=array();

protected$_message=array();

protected$_breakOnFailure=true;

publicfunctionset_breakOnFailure($value){

$this->_breakOnFailure=$value;

}

publicfunctionadd($key,$validate,$message='',$breakOnFailure=''){

if(empty($breakOnFailure))$breakOnFailure=$this->_breakOnFailure;

$this->_fileds[]=array($key,$validate,$message,$breakOnFailure);

return$this;

}

publicfunctionvalidator($array=array()){

if(empty($array))$array=$_POST;

if(is_array($this->_fileds)){

foreach($this->_filedsas$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))returnfalse;

returntrue;

}

returntrue;

}

publicfunctiongetMessage(){

return$this->_message;

}

publicfunctiongetMessageText(){

$str='';

foreach($this->_messageas$ms){

foreach($msas$m)$str.=$m[0]."n";

}

return$str;

}

}

?>

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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类