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]

时间: 2024-10-07 10:48:43

zend-form笔记的相关文章

zendframework form with captcha(Base on ZendFrameWork2.4)

1.首先扩展Zend\Captcha\Image,重写一下图片生成过程: <?php namespace Test\Captche; use Zend\Captcha\Exception\NoFontProvidedException; use Zend\Captcha\Image; /** * Class ImageCaptche * * @package Test\Captche * @author Xuman * @version $Id$ */ class ImageCaptche ex

ZendFramework2学习笔记 文件上传、文件上传进度

修改php.ini以适应文件的要求: //php.ini file_uploads = On post_max_size = 600M upload_max_filesize = 600M session.upload_progress.enabled = On session.upload_progress.freq = "1%" session.upload_progress.min_freq = "1" 以上我们限制了文件大小限制在不超过600MB. 关于文件

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

<?php // 1. 视图渲染器 class PhpRenderer implements Renderer, TreeRendererInterface { /** * 插件管理器 */ public function getHelperPluginManager() { if (null === $this->__helpers) {// false $this->setHelperPluginManager(new HelperPluginManager()); } return

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-life application, this won't get us very far, as we'll often need to support the full range of fullCreate, Read, Update and Delete operations (CRUD).

Database and models

Database and models The database Now that we have the Album module set up with controller action methods and view scripts, it is time to look at the model section of our application. Remember that the model is the part that deals with the application

Forms and actions

Forms and actions Adding new albums We can now code up the functionality to add new albums. There are two bits to this part: Display a form for user to provide details. Process the form submission and store to database. We will use zend-form to do th

jquery.form.js笔记

由于项目的原因,需要异步上传文件,网上找了找,很多都是用jquery.form插件的,于是乎找资料,调代码,做点小笔记. 官方资料:http://www.malsup.com/jquery/form/ demo: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>File Upload Demo&l

MVC Ajax Form &amp; Ajax Valida(笔记)

1.引入必要的文件 <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascri

HTML5第8次课堂笔记( 模拟form表单提交数据,xml的解析,jQuery的Ajax方法使用, mui的ajax)

HTML5第8次课堂笔记 1.  模拟form表单提交数据:(get方式) <body> <formmethod="get"action="DataTest7"> <inputtype="text"name="uname"value="yang"id="myname"><br/> <inputtype="password&q