通过setMessage自定义错误信息

代码:

<?php
require_once 'Zend/Validate/EmailAddress.php';
function c_email($email)
{$validator = new Zend_Validate_EmailAddress();$validator->setMessage("%value%不符合标准的E-mail地址格式");if($validator->isValid($email)){echo "输入的E-mail地址:";echo $email."有效!<p>";}else{echo "输入的E-mail地址:";echo $email."无效!";echo "失败消息为:<p>";$message = $validator->getMessages();echo $message['emailAddressInvalidFormat'];}
}$e_m1 = "abc@123.com";
$e_m2 = "abc#123.com";
c_email($e_m1);
c_email($e_m2);

结果:

输入的E-mail地址:abc@123.com有效!

输入的E-mail地址:abc#123.com无效!失败消息为:

abc#123.com不符合标准的E-mail地址格式

点评:

功能,通过setMessage方法设置自己想要的提示信息。

静态方法is()

作用:直接通过is()方法创建校验器,不用每次都去new来创建。

语法:

Zend_Validate::is($value,$classBaseName,$args);

代码:

<?php
require_once 'Zend/Validate.php';
function c_num($num){if(Zend_Validate::is($num,'Between',array(10,40)))//调用is()静态方法,并对结果进行判断
    {echo "<font color=\"#006600\">输入的数值:";echo $num."<p>在10与40之间!</font>";echo "<p>";}else{echo "<font color=\"#ff0000\">输入的数值:";echo $num."<p>不在10与40之间!</font>";echo "<p>";}
}
$num1 = 5;
$num2 = 22;
c_num($num1);
c_num($num2);

结果:

输入的数值:5

不在10与40之间!

输入的数值:22

在10与40之间!

点评:来看看源码是什么样的?

public static function is($value, $classBaseName, array $args = array(), $namespaces = array()){$namespaces = array_merge((array) $namespaces, self::$_defaultNamespaces, array('Zend_Validate'));$className  = ucfirst($classBaseName);try {if (!class_exists($className, false)) {require_once 'Zend/Loader.php';foreach($namespaces as $namespace) {$class = $namespace . '_' . $className;$file  = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';if (Zend_Loader::isReadable($file)) {Zend_Loader::loadClass($class);$className = $class;break;}}}$class = new ReflectionClass($className);if ($class->implementsInterface('Zend_Validate_Interface')) {if ($class->hasMethod('__construct')) {$keys    = array_keys($args);$numeric = false;foreach($keys as $key) {if (is_numeric($key)) {$numeric = true;break;}}if ($numeric) {$object = $class->newInstanceArgs($args);} else {$object = $class->newInstance($args);}} else {$object = $class->newInstance();}return $object->isValid($value);}} catch (Zend_Validate_Exception $ze) {// if there is an exception while validating throw itthrow $ze;} catch (Exception $e) {// fallthrough and continue for missing validation classes
        }require_once 'Zend/Validate/Exception.php';throw new Zend_Validate_Exception("Validate class not found from basename '$classBaseName'");}

源码做的事情大概就是把类引入,把条件引入,然后作出判断,返回结果。很神奇。略复杂。
尼玛,真不能小看了PHP。能如此娴熟的运用,太佩服了。

使用校验器链addValidator()

校验器链是多个校验器的一个连接。当所有的校验规则都通过时,将返回True值。

代码:

<?php
require_once 'Zend/Validate.php';
require_once 'Zend/Validate/StringLength.php';
require_once 'Zend/Validate/Alnum.php';
function c_content($value){$v_Chain = new Zend_Validate();$v_Chain->addValidator(new Zend_Validate_StringLength(8,12))->addValidator(new Zend_Validate_Alnum());if($v_Chain->isValid($value)){echo "输入的值:";echo $value."有效!";}else{echo "输入的值:";echo $value."无效!";echo "失败消息为:<p>";foreach($v_Chain->getMessages() as $message){echo "$message<p>";}}
}$temp1 = "123456";
$temp2 = "!@#$%^&*()";
$temp3 = "abcdefgh";
c_content($temp1);
c_content($temp2);
c_content($temp3);

结果:

输入的值:123456无效!失败消息为:

'123456' is less than 8 characters long

输入的值:!@#$%^&*()无效!失败消息为:

'!@#$%^&*()' contains characters which are non alphabetic and no digits

输入的值:abcdefgh有效!

点评:

让我们来看看内部的奥秘,

public function addValidator(Zend_Validate_Interface $validator, $breakChainOnFailure = false){$this->_validators[] = array('instance' => $validator,'breakChainOnFailure' => (boolean) $breakChainOnFailure);return $this;}

addValidator()方法将对象存入私有变量_validators中,

public function isValid($value){$this->_messages = array();$this->_errors   = array();$result = true;foreach ($this->_validators as $element) {$validator = $element['instance'];if ($validator->isValid($value)) {continue;}$result = false;$messages = $validator->getMessages();$this->_messages = array_merge($this->_messages, $messages);$this->_errors   = array_merge($this->_errors,   array_keys($messages));if ($element['breakChainOnFailure']) {break;}}return $result;}

验证的时候,进行遍历验证即可。

Zend Framework学习之验证ing相关推荐

  1. Zend Framework学习之常用校验器

    Date日期校验器 代码: <?php require_once 'Zend/Validate/Date.php'; function c_date($date){$validator = ne ...

  2. Zend Framework学习之Zend_Mail

    Zend_Mail组件提供了通用化的功能来创建和发送文本. Zend_Mail通过PHP内建的mail()函数或者直接通过SMTP连接来发送邮件. 一个简单的邮件由收件人.主题.邮件内容以及发件人等内 ...

  3. Zend Framework学习(3)第一个zend应用

    .htaccess文件 .htaccess文件用来实现URL重置,即当用户访问某资源时,会将其重新定位到指定的文件下. 代码示例: RewriteEngine on RewriteRule !\.(j ...

  4. Zend Framework学习之Zend_Config

    1.从PHP数组中读取数据 使用Zend_Config_Ini(读取ini配置文件) Zend_Config_Xml(读取XML配置文件) 案例: <?php require_once(&quo ...

  5. PHP高级教程——Zend Framework核心开发人员力作

    <PHP高级程序设计:模式.框架与测试> -- Zend Framework核心开发人员力作 在过去的十年间, PHP 已经从一套为 Web 站点开发人员提供的简单工具转化成完整的 OOP ...

  6. 【转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgnit...

    2019独角兽企业重金招聘Python工程师标准>>> [转]主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,Think ...

  7. Zend Framework Mail通过网易免费邮箱发送邮件

    2019独角兽企业重金招聘Python工程师标准>>> 做为一个苦逼的个人站长,做一个小网站,本来愿意来看的人就不多,再弄一个不能找回密码的会员系统?基本上被判死刑了 .阿里云的短信 ...

  8. zend framework php编码规范,Zend Framework常用校验器详解

    本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...

  9. Zend Framework一

    很久没有写东西了,有点懒了.最近做了一个PHP的项目,使用的框架是Zend Framework 1.8.第一次做PHP的项目,也是第一次使用Zend Framework.在网上找它的教程,发现中文教程 ...

  10. 修改android framework学习

    2019独角兽企业重金招聘Python工程师标准>>> 1:android平台编译自己编写的framework级service server实录 http://blog.sina.c ...

最新文章

  1. 洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)
  2. 预编译头超出上限错误 就是include比较多
  3. 【2017-02-19】数据类型、类型转换、常量、变量、转义符。
  4. dingo php,dingo 配置
  5. USACO-Section2.1 The Castle (深度优先搜索)
  6. 从 活动选择问题 看动态规划和贪心算法的区别与联系
  7. Ajax(一)——Ajax基础概念,HTTP头部(重点)
  8. ClassUtils常用方法总结,java核心技术第九版百度网盘
  9. spring AOP 讲解
  10. 设计没有标准,只有目标
  11. 9,求整数的二进制中1的个数《剑指offer》
  12. 人工智能ai医学辅助系统_不同的人工智能(AI)技术彻底改变了医学领域(AIM)...
  13. Bean被IoC容器销毁后还能使用吗?
  14. 山海经鸿蒙手游iOS 版本,山海经鸿蒙异兽手游下载,山海经鸿蒙异兽手游最新官方版 v1.0-手游汇...
  15. 计算机中存储、网络传输计量单位
  16. 计算机专业志愿者活动策划书模板,青春益起来之电脑义诊活动策划书
  17. 极化的概念及天线极化方式
  18. 阿里云安全ACP认证试验之阿里云Web应用防火墙接入体验
  19. “当高启强遇到陈书婷”与TCP协议
  20. 小程序中让后面的View覆盖到上一个view中

热门文章

  1. 服务器修改动态磁盘,服务器动态磁盘
  2. 图像数据流识别圆形_python opencv :使用Hough变换检测圆形,数钱。
  3. 导数与微分的知识点思维导图_高中历史各大板块知识点与思维导图汇总(必修二)...
  4. 大连工业大学计算机专硕调剂,2020大连工业大学调剂信息
  5. php invoke 反射,PHP ReflectionMethod invoke()用法及代码示例
  6. 新风系统风速推荐表_实验室通风系统的设计和应用
  7. html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
  8. 宝塔下php安装mongodb扩展_PHP安装MongoDB扩展
  9. arcgis导出地图分辨率多少合适_地图册制作:ArcGIS分幅制图——以深圳地铁线路图为例...
  10. mysql所选路径已经存在_5分钟安装好MySQL数据库(建议收藏)