标签:zend_form 生成表单 zend framework
Zend_Form 类用来聚合表单元素,显示组和子表单。它可以在这些条目中执行下列动作:
虽然由 Zend_Form 生成的表单可能复杂,可能最好的用法是做简单的表单,但是对于快速程序开发和生成原型(prototyping),它是最好的。
最基本的事情是实例化一个表单对象:
<?php // Generic form object: $form = new Zend_Form(); // Custom form object: $form = new My_Form() ?>
你可以可选地传递配置参数,它用来设置对象状态以及可能生成新元素:
<?php // Passing in configuration options: $form = new Zend_Form($config); ?>
Zend_Form 是可迭代的(iterable),它将按照它们注册的顺序和任何拥有的索引迭代所有元素、显示组和子表单。当你想手动地按适当的顺序解析(render)元素的时候,这个很有用。
Zend_Form 的魔法在于它能够为元素和显示组提供工厂服务(serve as a factory),并且通过装饰器来解析(render)自己。
1.元素(element)
Zend_Form
提供了若干 访问器用来从表单中添加和删除元素。这些可以获得元素对象实例或以工厂模式来为实例化元素对象自己服务。
添加元素的最基本的方法是 addElement()
。该方法可以或者带有Zend_Form_Element
(或者继承
Zend_Form_Element
的类 )类型对象的参数,或者用于建立新元素的参数- 包括元素类型、名称和任何配置选项。
如一些例子:
<?php // Using an element instance: $element = new Zend_Form_Element_Text('foo'); $form->addElement($element); // Using a factory // // Creates an element of type Zend_Form_Element_Text with the // name of 'foo': $form->addElement('text', 'foo'); // Pass label option to the element: $form->addElement('text', 'foo', array('label' => 'Foo:')); ?>
一旦元素被添加到表单,可以用名字来读取。通过使用getElement()
方法或者通过重载(overloading)使元素作为对象属性来访问:
<?php // getElement(): $foo = $form->getElement('foo'); // As object property: $foo = $form->foo; ?>
偶尔地,你只想生成一个元素并不想把它加到表单上(例如,你想利用众多的用表单注册的插件路径,但稍后把这些对象加到子表单上)。createElement()
方法可以完成这些:
<?php // $username becomes a Zend_Form_Element_Text object: $username = $form->createElement('text', 'username'); ?>
2. 组装和读取数值
校验表单之后,你一般需要读取它的数值以便执行其它操作,如更新数据库或通知一个 web 服务。你可以通过getValues()
来读取所有元素的值,getValue($name)
可以通过名字来读取一个单个的值:
<?php // Get all values: $values = $form->getValues(); // Get only 'foo' element's value: $value = $form->getValue('foo'); ?>
有时候,在解析之前,你想用特定的值来组装表单,可以通过setDefaults()
或
populate()
方法来完成:
<?php $form->setDefaults($data); $form->populate($data); ?>
在另一面,你可能想在组装和校验之前清除一个表单,可使用reset()
方法来完成:
$form->reset();
3. 元数据(Metadata)和属性(Attributes)
虽然表单的有效性基本源于它所包含的元素,但它也可以包含其它元数据,如名称(在 HTML 标记语言中经常用作唯一的 ID)、表单动作和方法、许多元素、组、它所包含的子表单和属性元数据(通常用做为表单标签自己设置 HTML 属性)。
可以使用名字访问器来设置和读取表单的名字:
<?php // Set the name: $form->setName('registration'); // Retrieve the name: $name = $form->getName(); ?>
为了设置动作(到表单提交的 url )和方法(提交的方法如‘POST‘ 或 ‘GET‘),使用动作和方法访问器:
<?php // Set the action and method: $form->setAction('/user/login') ->setMethod('post'); ?>
你也可以指定特别使用 enctype 访问器的表单编码类型。Zend_Form 定义了两个常量,Zend_Form::ENCTYPE_URLENCODED
和
Zend_Form::ENCTYPE_MULTIPART
,分别对应值为 ‘application/x-www-form-urlencoded‘ 和‘multipart/form-data‘; 然而,你可以把它设置为任意的编码类型。
<?php // Set the action, method, and enctype: $form->setAction('/user/login') ->setMethod('post') ->setEnctype(Zend_Form::ENCTYPE_MULTIPART); ?>
设置任意元数据可通过属性访问器来完成。因为在Zend_Form
中重载用于访问元素、显示组和子表单,这是唯一的访问元数据的方法。
<?php // Setting attributes: $form->setAttrib('class', 'zend-form') ->addAttribs(array( 'id' => 'registration', 'onSubmit' => 'validate(this)', )); // Retrieving attributes: $class = $form->getAttrib('class'); $attribs = $form->getAttribs(); // Remove an attribute: $form->removeAttrib('onSubmit'); // Clear all attributes: $form->clearAttribs(); ?>
表单的一个基本用例是校验提交的数据。Zend_Form
让你一次性校验整个表单或部分表单,还有对 XmlHttpRequests (AJAX)的自动校验响应。如果提交的数据无效,它有一些方法用来为元素和子表单校验失败而读取各种各样的错误代码和消息。
为了校验整个表单,使用 isValid()
方法:
isValid()
校验每个必需的元素和任何包括在提交的数据中的非必需的元素。
有时候你可能只需要校验数据的一个子集,可以使用isValidPartial($data)
:
<?php if (!$form->isValidPartial($data)) { // failed validation } ?>
isValidPartial()
只尝试校验那些数据中匹配的元素,如果某个元素不在数据中,那就跳过。
当为 AJAX 请求校验元素或元素组,你一般要校验表单的一个子集,并想要响应返回到 JSON。用processAjax()
正好:
<?php $json = $form->processAjax($data); ?>
你可以发送 JSON 响应到客户端。如果表单有效,这将是个布尔true 响应,如果表单无效,则是个包含 key/message 对的 javascript 对象,这里,每个 ‘message‘ 是校验错误消息的数组。
对于校验失败的表单,你可以分别使用
getErrors()
和 getMessages()
获取错误代码和错误消息:
<?php $codes = $form->getErrors(); $messages = $form->getMessage(); ?>
你可以通过传递元素名为单个元素来获取代码和错误消息;
<?php $codes = $form->getErrors('username'); $messages = $form->getMessages('username'); ?>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:zend_form 生成表单 zend framework
原文地址:http://blog.csdn.net/u012675743/article/details/47418615