1.指定表单的动作和方法:setAction()与setMethod() 2.设置form的属性:setAttrib(属性名称,属性值)与setAttribs(属性数组); 3.添加表单元素:addElement()方法; 常用的基本元素有button,checkbox,hidden,image,password,radio,reset,select,submit,text,textarea 另外还有captcha,exception,file,hash,multicheckbox,multiselect; 添加方式有两种: $form->addElement(new Zend_Form_Element_Text('username')); $form->addElement('text', 'username'); 4.给表单元素添加校验器 zend_validate_*; *可以是Alnum(是否为字母或数字的组合),Alpha(是否为纯字母), Between(数值是否位于两个值之间),EmailAddress(地址格式是否正确)等等; 其中最为特殊的是Regex,几乎可以实现所有的校验规则 添加校验器方法:addValidator(new Zend_Validate_Alnum);或者addValidator('alnum')或者addValidator('regex', false, array('/^[a-z]/i'))); 例子: isValid($email)) { // email 有效 } else { // email 无效; 打印原因 foreach ($validator->getMessages() as $messageID => $message) { echo "Validation failure '$messageID': $message\n"; } } if (Zend_Validate::is($email, 'EmailAddress')) { // 是, email 有效 } if (Zend_Validate::is($value, 'Between', array(1, 12))) { // 这个值是介于1到12之间的 } 例如: 第一种格式: 'Digits',); 第二种格式: $digits); 第三种:包含映射到带有传递给自己的构造器 的类名的字符串的数组 array( 'Digits', // string new Zend_Validate_Int(), // object instance array('Between', 1, 12) // string with constructor arguments ) ); Zend_Filter_Input 提供了一个声明接口来联合多重过滤器和校验器,使用 它们来收集数据并在用过滤器和校验器处理之后来获取输入值; 1.声明过滤器和校验器规则 2.创建过滤器和校验器的处理器 3.提供输入数据 4.获取被校验的字段和其它报告 $input = new Zend_Filter_Input($filters, $validators,data);//你可以指定输入数据为第三个构造器参数,data可以作为zend_Filter_Input的第三个参数,数据结构是个关联数组。 键是字段名,值是数据值 $input = new Zend_Filter_Input($filters, $validators); $input->setData($newData);使用setData()可以对不同的数据采用相同的规则 $filters = array( '*' => 'StringTrim', 'month' => 'Digits' 例子: if ($_POST) { $validators = array( 'archive' => array( 'Digits', // string new Zend_Validate_Int(), // object instance array('Between', 1, 12) // string with constructor arguments ) ); $filters = array( '*' => 'StringTrim', 'archive' => 'Digits' ); $data = $_POST; $input = new Zend_Filter_Input($filters, $validators, $data); if ($input->isValid()) { echo "Field 'archive' is OK\n"; }else { echo "faile"; } exit; } $input还可以通过hasInvalid()、hasMissing()、hasUnknown来获得无效、丢失或未知的字段; 为了防止无意识的、可能会导致安全问题的代码输出,可以使用转义过滤器; $options = array('escapeFilter' => 'StringTrim'); $input = new Zend_Filter_Input($filters, $validators, $data, $options); $input = new Zend_Filter_Input($filters, $validators, $data); $input->setDefaultEscapeFilter(new Zend_Filter_StringTrim()); 5.装饰器 第一种(标准装饰器): Zend_Form_Decorator_Callback Zend_Form_Decorator_Captcha Zend_Form_Decorator_Description Zend_Form_Decorator_DtDdWrapper Zend_Form_Decorator_Errors Zend_Form_Decorator_Fieldset Zend_Form_Decorator_Form Zend_Form_Decorator_FormElements Zend_Form_Decorator_HtmlTag Zend_Form_Decorator_Image Zend_Form_Decorator_Label Zend_Form_Decorator_ViewHelper Zend_Form_Decorator_ViewScript 例子:用视图脚本替换内容 (placement是布置内容的位置;默认的是追加,还有一种情况是预先准备;如果是要替换内容的话,就将此设置为false,忽略这个设置) //装饰器的创建 $element->addDecorator('ViewScript', array('placement' => false)); $decorator->setOption('placement', false); //已经创建过装饰器 $element->getDecorator('ViewScript')->setOption('placement', false); $this->decorator->setOption('placement', false); 第二种(定制装饰器): 构建一个装饰器类;例如:My_Decorator_Composite ,可以继承Zend_Form_Decorator_Abstract这个抽象类; 在这个装饰器类中对元素进行处理,实现render()方法;接着将这个装饰器放到装饰器路径里; $element->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');//给一个元素添加装饰器路径 $form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');//给表单所有元素添加装饰器路径