之前写了一片文章关于如何在ZF0.6版本下扩展ZF的。这篇应该说是类似的文章,但环境换成ZF1.0RC1版本了。
在开始ZF扩展之前,推荐先看看ZF手册中的一些命令规范(ZF推荐使用),同时希望读者对ZF有较好的理解。如果没有,可以先上PHPCHIAN的ZF版本详细了解,或者到phpeye查找相关资料。
ZF的validator提供了强大的验证功能,但在实际的操作中还是过于烦琐。比如说验证邮件,是用ZF的代码如下
<?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";
}
}
?>
有没有发现,还是很类似我们不使用ZF的验证方式。只不过ZF帮我们把邮件验证的细节封装好了。那么我们如何简化成这样效果呢?(下面是我扩展后的调用方式)
<?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;
}
}
?>
另外你还可以直接扩展一些验证规则类。下篇我再详细说。
在开始ZF扩展之前,推荐先看看ZF手册中的一些命令规范(ZF推荐使用),同时希望读者对ZF有较好的理解。如果没有,可以先上PHPCHIAN的ZF版本详细了解,或者到phpeye查找相关资料。
ZF的validator提供了强大的验证功能,但在实际的操作中还是过于烦琐。比如说验证邮件,是用ZF的代码如下
<?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";
}
}
?>
有没有发现,还是很类似我们不使用ZF的验证方式。只不过ZF帮我们把邮件验证的细节封装好了。那么我们如何简化成这样效果呢?(下面是我扩展后的调用方式)
<?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;
}
}
?>
另外你还可以直接扩展一些验证规则类。下篇我再详细说。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]