时间:2021-05-26
之前写了一片文章关于如何在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"$message\n";
}
}
?>
有没有发现,还是很类似我们不使用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;
}
}
?>
另外你还可以直接扩展一些验证规则类。下篇我再详细说。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了ZendFramework框架Smarty扩展实现方法。分享给大家供大家参考,具体如下:今天总结一下ZF框架中扩展Smarty模板的方法,在ZF帮
PHP安装扩展mcrypt以及相关依赖项【PHP安装PECL扩展的方法】一:Mcrypt简介Mcrypt是PHP的一个扩展,完成了常用加密算法的封装。其实该扩展
扩展类型底层扩展(基于C语言):PECL上层扩展(基于PHP语言):PEARComposerPECL#查找扩展$peclsearchextname#安装扩展$p
扩展你的php扩展你的php扩展的3种方式extensiondll方式的扩展小结 首先注意,以下所有的一切皆在win下进行,使用的工具的VC++6.0。扩展你
安装php扩展:windows下的memcache步骤1.下载php的扩展dll:http://downloads.php.net/pierre/(如果上述目录