zend-form笔记
Zend-Form组件包含以下几个对象:
1、Elements:包含了name和attributes,
2、Fieldsets:继承自elements,但允许包含其他fieldset和elements,
3、Forms:继承自Fieldsets。提供数据和对象绑定,并组合了InputFilters。数据绑定由zend-hydrator实现。
为了更好的利用view layer,zend-form也聚合了大量与form有关的view helpers。
最低限度的每一个element和fieldset都需要一个名字。
大多数情况下,你还需要提供一些属性来指示view层如何渲染这些元素。
Zend-form里面的工厂通常用来创建elements,fieldsets,forms和相关的输入过滤(input filter)。工厂可以简化表单的创建。
与form相关的代码可能会跨越几个区域:form定义,输入过滤定义,领域模型类,一个或更多地hydrator实现。(hydrator用来数组和对象之间的转换,序列化)
Zend\Form\Annotation\AnnotationBuilder可以用来创建各种你需要的对象(上面跨越的几个区域)
Forms是元素和自定义字段(fieldsets)的聚合,最低限度的每一个元素和自定义字段都需要一个名字。更多地情况下,可以提供一些属性来告诉view层如何渲染(比如隐藏的表单)。
使用工厂直接创建InputFilter,对表单输入过滤。
执行表单验证是通过向setData()提供一个数组数据,然后调用isValid方法。如果你想更加的简化工作,可以将一个对象绑定到表单上。一旦成功验证,将从被验证的值填充?
一般性步骤(比较冗余)
/*创建元素,*/
$name = new Element('name');
/*设置标签*/
$name->setLabel('Your name');
/*设置元素的各种属性。。。*/
$name->setAttributes(['type' => 'text',]);
/*创建表单,*/
$form = new Form('contact'); /*将元素添加到表单里面。*/
$form->add($name); /*创建某个元素的Input,*/
$nameInput = new Input('name'); /*创建inputfilter,*/
$inputFilter = new InputFilter(); /*添加input到inputfilter。*/
$inputFilter->add($nameinput); /*把inputfilter连接到表单。*/
$form->add($inputFilter);
通过工厂创建
你可以通过工厂一次性创建整个表单和input filter。如果你想将自己的表单保存为纯配置,这种方法very nice。将配置信息传给工厂即可。
步骤如下:
1、创建工厂对象(Zend\Form\Factory)
调用createForm方法,使用配置信息创建Form对象。 。。。
默认的Form实现时基于工厂的。这意味着你可以定义自己的表单。
验证表单:
表单验证需要三个步骤:
/*1、表单必需被一个input filter连接。*/
$yourform->setInputFilter(new yourformFilter()); /*2、你必须将需要验证的数据注入到表单中。*/
$data = $request->getPost();
$data = $request->getQuery();
$yourform->setData($data); /*3、验证表单。*/ /*4、如果数据验证无效,你将会获取到错误消息。*/
if ($form->isValid()) {
$validateData = $form->getData();
}else {
$messages = $form->getMessages();
}
指示给Input Filter:
有时候你想在创建元素的同时创建inputfilter。
How TO:
元素需要实现Zend\InputFilter\InputProviderInterface,这里面定义了getInputSpecification()方法。返回的数据会被input filter工厂使用来创建一个input
对于fieldset必须实现Zend\InputFilter\InputFilterProviderInterface,这里面定义了getInputFilterSpecification()方法。必须为input filter返回配置。
绑定一个对象:https://docs.zendframework.com/zend-form/quick-start/#binding-an-object
当你绑定一个对象到表单时会发生以下行为:
1、Hydrator调用extract(),返回的值构成所有元素的值属性。如果表单包含嵌套fieldset,那么表单会递归的解析出值。
2、当isValid()被调用时,如果setData()还没被调用。表单使用Hydrator从对象中解析出值来。然后使用这些值进行验证。也就是使用对象里的数据给表单赋值。
3、如果isValid()验证成功了,Hydrator将会被传入有效的值来绑定object。
4、如果对象实现了Zend\InputFilter\InputFilterAwareInterface,那对象包含的input filter会被用来替换form所包含的input filter。
对象帮定到表单的时候,使用getData默认返回的是对象。使用FormInterface::VALUES_AS_ARRAY标志可以返回关联数组。
关于视图方面:
form组件包含一系列的view helpers。这些帮助函数接受各种form对象,通过内省生成markup。一般来讲,他们会检查特性,但特殊情况下,他们也许会查找其他属性和被组合的对象。
在准备渲染之前,你一般需要调用prepare()。该方法会确保内省已经完成,并确嵌套在fieldsets和集合里的元素以数组标记的形式生成名字。如scoped[array][notation]
zend-form笔记的更多相关文章
- asp.net Core MVC + form validation + ajax form 笔记
asp.net Core MVC 有特别处理form,controller可以自己处理model的验证,最大的优势是写form时可以少写代码 先了解tag helper ,这东西就是element上的 ...
- Forms and actions
Forms and actions Adding new albums We can now code up the functionality to add new albums. There ar ...
- Database and models
Database and models The database Now that we have the Album module set up with controller action met ...
- Making Use of Forms and Fieldsets
Making Use of Forms and Fieldsets So far all we have done is read data from the database. In a real- ...
- 解决ZF2_PATH environment
本方法基于:ZendFramework 2.1.4版本在WIN7下构建,其他版本的安装方式相差不大. 操作之前您需要搭建好PHP运行环境,保证PHP版本不低于PHP 5.3.3,并且去http://f ...
- ZendFramework-2.4 源代码 - 关于MVC - View层 - 视图渲染器、视图插件管理器
<?php // 1. 视图渲染器 class PhpRenderer implements Renderer, TreeRendererInterface { /** * 插件管理器 */ p ...
- How to generate entities from database schema using doctrine-orm-module
1.安装好doctrine,在composer.json中添加如下 "require": { "php": "^5.6 || ^7.0", ...
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法
Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...
随机推荐
- [Compose] 8. A curated collection of Monoids and their uses
const { List } = require('immutable-ext'); const Right = x => ({ chain : f => f(x), ap : other ...
- php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort)
php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 ...
- PEM_密钥对生成与读取方法
PS:欢迎转载,但请注明出处,谢谢配合. 前言: PEM是OpenSSL和许多其他SSL工具的标准格式,OpenSSL 使用PEM 文件格式存储证书和密钥.这种格式被设计用来安全的包含在ascii甚至 ...
- signed 与 unsigned 有符号和无符号数
unsigned int a = 0; unsigned int b = -1; // b 为 0xffffffff unsigned int c = a - 1; // c 为 0xffffffff
- Opencv Surf算子特征提取与最优匹配
Opencv中Surf算子提取特征,生成特征描述子,匹配特征的流程跟Sift是完全一致的,这里主要介绍一下整个过程中需要使用到的主要的几个Opencv方法. 1. 特征提取 特征提取使用SurfFea ...
- php如何实现万年历的开发(每日一课真是非常有效率)
php如何实现万年历的开发(每日一课真是非常有效率) 一.总结 一句话总结: 1.判断每月有多少天: 通过data函数来判断,$days=date('t',$firstday); 2.判断每月的第一天 ...
- SEO那些事:一句代码一键分享网站
这是很久以前就已经写过的笔记了,有一个习惯,每次遇到一个问题,都会进行百度,然后把解决问题的关键点记录下来,有人问我,为什么更新频率如此之快,大部分都是从前积累的知识点. 其实每天工作所涉及的知识点都 ...
- DownLoadManager[20530:228829] DiskImageCache: Could not resolve the absolute path of the old directory.
uiwebview 模拟器打开PDF文件时崩溃.报下面错误,还不知道为什么 DownLoadManager[20530:228829] DiskImageCache: Could not resolv ...
- MySQL数据库备份详解
原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...
- 利用navicat写mysql的存储过程
最近项目经理让我给新的活动的预留一个插入红包和查看详情的sql,方便在项目出问题的做一些紧急操作,我想了下这里面还涉及到挺多逻辑和挺多表的一句句查也不方便啊,干脆写到存储过程里,于是开始在navica ...