文档章节

ZendFramework(核心组件—过滤器之 Zend_Filter_Input过滤器)

大神丶
 大神丶
发布于 2015/01/13 15:17
字数 1366
阅读 5
收藏 0

由于 Zend_Filter_Input过滤器有些特殊,我们单独拿出来一起学习下。这东西专门用于实现对互动程序中用户输入数据的过滤,说白了就是对form表单过滤。要实现过滤通常有以下几个步骤:

1.定义过滤与效验规则。

2.创建过滤与效验处理器。

3.检索处理后的字段与其他报告内容。


下边我们按照以上三步学习下 Zend_Filter_Input过滤器的定义方法------------


定义过滤器与效验规则

在创建一个 Zend_Filter_Input类之前,需要为该过滤器分别创建过滤规则和效验规则数组。

其中的两个键与值呢为需要获取前台表单项的名称(也就是表单中name的值)与相应对其进行处理的子类名称(也就是过滤和效验的规则)。


下边不废话举个书上的例子:

        $filters=array(                                //定义过滤规则
                'username'=>'StringToLower',
                'month'=>'Digits'
        );

       $validators=array(                              //定义效验规则
                'username'=>'Alpha',
                'month'=>array(array('Between',1,12))
        );


看到没,这就是用数组方式定义的过滤规则和效验规则。username就是表单name的值,StringToLower就是规则。

除了这种单一的定义方法以外,还可以使用如下形式,把指定内容使用一组效验规则。

$validators=array(

           'month'=>array(

                        'Digits',                                            //字符串表示类名

                        'new Zend_Validate_Int(),           //对象表示类

                        'array('Between',1,12)                  //数组以字符串及附加参数表示

         )

);

所创建的校验器就实现了对月份进行了三重效验,分别是数值效验、证书效验与位于1和12之间效验。可以看出使用数组参数既可以是以字符串表示效验名称,还可以使校验器类的实例哦。

还可以使用数组的形式来表示,还有如果校验器中有附加参数,则必须数组的形式来表示。还可以使用通配符 “*” ,改符号代表所有表单项。例如以下代码:

$filters=array(

  ' * ' => 'HtmlEntities',

  ' age ' => 'Digits'

);


创建Input过滤器

创建Input过滤器无非就是实例化一个对象并加上指定参数,方法如下:

$input = new Zend_Filter_Input($filters,$validators,$data)

其中$filters为过滤规则数组,$validators为效验规则数组,$data为表单数据的来源(就是form表单采用的方式比如说post)。如果$data的值为$_post。代码所定义的过滤器将从数组$_post[ ]中过去数据。



检索处理后的字段与其他内容

在定义了Zend_Filter_Input过滤器之后,就可以通过多种方法来获取其 中的各项内容,包括无效内容(Invalid)、丢失内容(Missing)和未知内容(UNknown)等。当然最重要的还是返回经过过滤器处理后的内 容。正常获取处理后的内容如下方法:

$input = new Zend_Filter_Input($filters,$validators,$data)

$m=$input->month;

其中,$input为指定Zend_Filter_Input过滤器的实例;month为经过过滤的表单项名称。


对于Zend_Filter_Input过滤器的学习呢,我还是做了一个例子,这例子修改书上的,很是经典。

1.首先我们先创建一个项目。

2.创建一个控制器SelfController.php      

3.创建public function selfAction()方法用来调用表单视图

4.创建 /self/self.phtml视图用于写表单

5.创建public function jieguoAction()方法把表单内容提交到这,在此方法中检索字段与其他内容


大概呢就分为这几步骤,下边我把文件内容展示给大家看:

文件SelfController.php内容如下--

<?php
/*Zend_Controller_Ation*/
require_once 'Zend/Controller/Action.php';
//SelfController

class SelfController Extends Zend_Controller_Action
{
    public function selfAction()
    {
        //input过滤器使用
    
    }
    
    
    
    public function jieguoAction()
    {
        
        $filters=array(                                //定义过滤规则
                'username'=>'StringToLower',
                'month'=>'Digits'
        );
        
        $validators=array(                              //定义效验规则
                'username'=>'Alpha',
                'month'=>array(array('Between',1,12))
        );
        
        $data=$_POST;    
        $input=new Zend_Filter_Input($filters, $validators,$data);   //为类实例化对象并指明参数

        
        
    
         if($input->hasInvalid()){
            echo "111";
        $invalidFiedlds=$input->getInvalid();                 //获取无效内容,近没有效验通过的表单项
        }
        
        if ($input->hasMissing()){
            echo "222";
        $missingFields=$input->getMissing();
        }
        if ($input->hasUnknown()){
            echo "333";
        $unknownFields=$input->getUnknown();
        }
        
        
        
        $m=$input->month;
        $n=$input->username;
        $m3=$input->getUnescaped('month');
        
        
        echo "<p>";
        echo "未经过过滤的表单项为:";
        echo "<p>";
        print_r($invalidFiedlds);
        
        echo "<p>";
        echo "没有出现表单项为:";
        echo "<p>";
        print_r($missingFields);
        
        echo "<p>";
        echo "未被定义过滤的表单项为:";
        echo "<p>";
        print_r($unknownFields);
        
        
        
        
        
        echo "<p>";
        echo "过滤后的月份为:";
        echo "<p>";
        print_r($m);
        
        echo "<p>";
        echo "过滤后的用户名为:";
        echo "<p>";
        print_r($n);

        
    }
    
    
    
}

文件self.phtml内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>应用Zend_filter_Input实例前台</title>
</head>
<body>
<p align="center">
<table border="1">
<captoin>加入表单</captoin>
<form method="post" action="<?php echo $this->baseUrl();?>/self/jieguo">
<tr>
<td>姓名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="radio" name="sex" value="男" checked>男
<input type="radio" name="sex" value="女">女
<input type="radio" name="sex" value="变态">变态</td>
</tr>
<tr>
<td>出生日期</td>
<td>
<input type="text" name="year" size="4">年
<input type="text" name="month" size="4">月
<input type="text" name="day" size="4">日
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</form>
</table>

</body>
</html>

和书上的代码内容类似,但是有些地方是我改过的,我写的是整个项目,而书上的只是单个的几个文件而已,不同之处就是我的不用加载类什么的,应为系统已经把所有的类全都加载了。



千里之行,始于足下。(老子)


© 著作权归作者所有

大神丶
粉丝 0
博文 4
码字总数 3538
作品 0
东城
程序员
私信 提问
【PHP-ZF】在wamp中配置zf环境、新建zf项目

【在wamp中配置zf环境】 1>.找到apache 的安装目录,找到httpd.conf 文件,有两处需要修改: AllowOverride none 改为 AllowOverride All #LoadModule rewritemodule modules/modrewrite.so ......

呢喃的猫咪
2012/10/30
737
0
ZendFramework的介绍、安装和实例运行

框架主要是为了提高开发效率、使得团队开发人员之间的更容易沟通和协作以及提高应用程序的可维护性。学习了解一种或多种框架对实际项目的应用会有所帮助。 一、ZendFramework 的介绍: Zend...

晨曦之光
2012/03/09
4.6K
0
zend studio10 引入 zendframework项目

1、生成zendframework项目 切换目录: C:ZendFramework-1.12.3bin> 创建工程: C:ZendFramework-1.12.3bin>zf.bat create project d:/jackzf 2、zend studio引入刚刚创建的项目 创建一个空项......

jackguo
2013/04/29
1K
0
Zend Framework 2 抢先体验

新一代的PHP框架Zend Framework 2 诞生了,它基于Zend Framework 1,仅支持PHP 5.3,它将在未来一年里取代其旧版本。 初探 因为熟悉Zend Framework 1,我决定进入2.x beta版本,看看有什么变化...

迷途d书童
2012/03/15
3.9K
4
ZF1.*愤怒小鸟系列一:快速入门

【环境】:win7 xamppv3.1.0 ZendFramework-1.12.3 【目标】: 搭建ZF MVC框架,实现hello world! 【步骤】: 1、解压ZendFramework-1.12.3,将bin的目录添加到path环境变量里 2、在命令行模...

weber_hyx
2013/04/14
49
0

没有更多内容

加载失败,请刷新页面

加载更多

使用TensorFlow的AI程序运行报错AttributeError: module 'tensorflow' has no attribute 'xxx'

使用TensorFlow的AI程序,在运行时报错AttributeError: module 'tensorflow' has no attribute 'xxx',首先检查是否是包路径不对,一般是版本变化所致。...

织梦之魂
57分钟前
3
0
提示浏览器版本低

本文转载于:专业的前端网站➭提示浏览器版本低 网站网页在遇到浏览器低版本(尤其是IE浏览器)时,提示浏览器版本低(如IE8以及以下),建议用户升级浏览器以获得最好体验。以下是代码: 1...

前端老手
59分钟前
6
0
CentOS 7系统增加swap

转载请注明文章出处:CentOS 7系统增加swap swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关)...

tlanyan
今天
6
0
基于Prometheus和Grafana的监控平台 - 环境搭建

相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。 Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说...

JAVA日知录
今天
6
0
PHP运行时全局构造体

struct _php_core_globals { zend_bool magic_quotes_gpc; // 是否对输入的GET/POST/Cookie数据使用自动字符串转义。 zend_bool magic_quotes_runtime; //是否对运行时从外部资源产生的数据使...

冻结not
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部