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笔记的更多相关文章

  1. asp.net Core MVC + form validation + ajax form 笔记

    asp.net Core MVC 有特别处理form,controller可以自己处理model的验证,最大的优势是写form时可以少写代码 先了解tag helper ,这东西就是element上的 ...

  2. Forms and actions

    Forms and actions Adding new albums We can now code up the functionality to add new albums. There ar ...

  3. Database and models

    Database and models The database Now that we have the Album module set up with controller action met ...

  4. 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- ...

  5. 解决ZF2_PATH environment

    本方法基于:ZendFramework 2.1.4版本在WIN7下构建,其他版本的安装方式相差不大. 操作之前您需要搭建好PHP运行环境,保证PHP版本不低于PHP 5.3.3,并且去http://f ...

  6. ZendFramework-2.4 源代码 - 关于MVC - View层 - 视图渲染器、视图插件管理器

    <?php // 1. 视图渲染器 class PhpRenderer implements Renderer, TreeRendererInterface { /** * 插件管理器 */ p ...

  7. How to generate entities from database schema using doctrine-orm-module

    1.安装好doctrine,在composer.json中添加如下 "require": { "php": "^5.6 || ^7.0", ...

  8. [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

随机推荐

  1. mysql查询字段所在表

    use information_schema;select * from columns where column_name='字段名' ;

  2. 小雷FansUnion:我有了第一个付费客户(第一个徒弟)

    很高兴地告诉大家一个振奋人心的消息,我刚刚拥有了第一个付费客户. 第一个付费客户是山东青岛的一个上班族,有2年.Net经验,今年转Java开发.对我比较信任,在我的建议下,选择了"拜师学艺& ...

  3. oracle listener.ora的host不能使localhost,而应该是该机器名,否则不能用ip地址进行连接

    # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/lis ...

  4. 多校第六场 HDU 4927 JAVA大数类+模拟

    HDU 4927 −ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊.如今对组合算比較什么了-- import java ...

  5. spring mvc redirect 重定向 跳转并传递参数

    在项目中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,具体跳转方式有以下几种方式: 公用代码: @RequestMapping(value=" ...

  6. 【机器学习实战】第10章 K-Means(K-均值)聚类算法

    第 十 章 K-Means(K-均值)聚类算法 K-Means 算法 聚类是一种无监督的学习, 它将相似的对象归到一个簇中, 将不相似对象归到不同簇中.相似这一概念取决于所选择的相似度计算方法.K-M ...

  7. 详细阐述Web开发中的图片上传问题

    Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...

  8. 【t011】最小覆盖子串

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 给定一个含有N个元素的序列A,你的任务就是求出序列A的最小覆盖子串的长度. 本题中的一些定义: 串S,是 ...

  9. vultr的80端口?

    1.查看防火墙版本号firewall-cmd --version2.查看防火墙状态firewall-cmd --state3.添加80端口的权限firewall-cmd --zone=public - ...

  10. Indexing Sensor Data

    In particular embodiments, a method includes, from an indexer in a sensor network, accessing a set o ...