Zend Framework学习之验证ing
通过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相关推荐
- Zend Framework学习之常用校验器
Date日期校验器 代码: <?php require_once 'Zend/Validate/Date.php'; function c_date($date){$validator = ne ...
- Zend Framework学习之Zend_Mail
Zend_Mail组件提供了通用化的功能来创建和发送文本. Zend_Mail通过PHP内建的mail()函数或者直接通过SMTP连接来发送邮件. 一个简单的邮件由收件人.主题.邮件内容以及发件人等内 ...
- Zend Framework学习(3)第一个zend应用
.htaccess文件 .htaccess文件用来实现URL重置,即当用户访问某资源时,会将其重新定位到指定的文件下. 代码示例: RewriteEngine on RewriteRule !\.(j ...
- Zend Framework学习之Zend_Config
1.从PHP数组中读取数据 使用Zend_Config_Ini(读取ini配置文件) Zend_Config_Xml(读取XML配置文件) 案例: <?php require_once(&quo ...
- PHP高级教程——Zend Framework核心开发人员力作
<PHP高级程序设计:模式.框架与测试> -- Zend Framework核心开发人员力作 在过去的十年间, PHP 已经从一套为 Web 站点开发人员提供的简单工具转化成完整的 OOP ...
- 【转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgnit...
2019独角兽企业重金招聘Python工程师标准>>> [转]主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,Think ...
- Zend Framework Mail通过网易免费邮箱发送邮件
2019独角兽企业重金招聘Python工程师标准>>> 做为一个苦逼的个人站长,做一个小网站,本来愿意来看的人就不多,再弄一个不能找回密码的会员系统?基本上被判死刑了 .阿里云的短信 ...
- zend framework php编码规范,Zend Framework常用校验器详解
本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...
- Zend Framework一
很久没有写东西了,有点懒了.最近做了一个PHP的项目,使用的框架是Zend Framework 1.8.第一次做PHP的项目,也是第一次使用Zend Framework.在网上找它的教程,发现中文教程 ...
- 修改android framework学习
2019独角兽企业重金招聘Python工程师标准>>> 1:android平台编译自己编写的framework级service server实录 http://blog.sina.c ...
最新文章
- 洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)
- 预编译头超出上限错误 就是include比较多
- 【2017-02-19】数据类型、类型转换、常量、变量、转义符。
- dingo php,dingo 配置
- USACO-Section2.1 The Castle (深度优先搜索)
- 从 活动选择问题 看动态规划和贪心算法的区别与联系
- Ajax(一)——Ajax基础概念,HTTP头部(重点)
- ClassUtils常用方法总结,java核心技术第九版百度网盘
- spring AOP 讲解
- 设计没有标准,只有目标
- 9,求整数的二进制中1的个数《剑指offer》
- 人工智能ai医学辅助系统_不同的人工智能(AI)技术彻底改变了医学领域(AIM)...
- Bean被IoC容器销毁后还能使用吗?
- 山海经鸿蒙手游iOS 版本,山海经鸿蒙异兽手游下载,山海经鸿蒙异兽手游最新官方版 v1.0-手游汇...
- 计算机中存储、网络传输计量单位
- 计算机专业志愿者活动策划书模板,青春益起来之电脑义诊活动策划书
- 极化的概念及天线极化方式
- 阿里云安全ACP认证试验之阿里云Web应用防火墙接入体验
- “当高启强遇到陈书婷”与TCP协议
- 小程序中让后面的View覆盖到上一个view中
热门文章
- 服务器修改动态磁盘,服务器动态磁盘
- 图像数据流识别圆形_python opencv :使用Hough变换检测圆形,数钱。
- 导数与微分的知识点思维导图_高中历史各大板块知识点与思维导图汇总(必修二)...
- 大连工业大学计算机专硕调剂,2020大连工业大学调剂信息
- php invoke 反射,PHP ReflectionMethod invoke()用法及代码示例
- 新风系统风速推荐表_实验室通风系统的设计和应用
- html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
- 宝塔下php安装mongodb扩展_PHP安装MongoDB扩展
- arcgis导出地图分辨率多少合适_地图册制作:ArcGIS分幅制图——以深圳地铁线路图为例...
- mysql所选路径已经存在_5分钟安装好MySQL数据库(建议收藏)