Zend_Form 之定制表单

23.4.10.  定制表单

一个使用基于配置的表单的替代方法是继承 Zend_Form 类,有若干优点:

  • 可以容易进行单元测试来确保校验和解析如愿执行。
  • 精细地控制每个元素。
  • 重使用表单对象,最大化可移植性(不需要跟踪配置文件)。
  • 实现定制功能。

最典型的用例是使用 init() 方法来设置指定的表单元素和配置:

<?php
class My_Form_Login extends Zend_Form
{
    public function init()
    {
        $username = new Zend_Form_Element_Text('username');
        $username->class = 'formtext';
        $username->setLabel('Username:')
                 ->setDecorators(array(
                     array('ViewHelper', array('helper' => 'formText')),
                     array('Label', array('class' => 'label'))
                 ));

        $password = new Zend_Form_Element_Password('password');
        $password->class = 'formtext';
        $password->setLabel('Username:')
                 ->setDecorators(array(
                     array('ViewHelper', array('helper' => 'formPassword')),
                     array('Label', array('class' => 'label'))
                 ));

        $submit = new Zend_Form_Element_Submit('login');
        $submit->class = 'formsubmit';
        $submit->setValue('Login')
               ->setDecorators(array(
                   array('ViewHelper', array('helper' => 'formSubmit'))
               ));

        $this->addElements(array(
            $username,
            $password,
            $submit
        ));

        $this->setDecorators(array(
            'FormElements',
            'Fieldset',
            'Form'
        ));
    }
}
?>

这个表单可以简单地实例化:

<?php
$form = new My_Form_Login();
?>

所有的功能已经设置并准备好了,不需要配置文件。(注意这个例子非常简化,因为它没有为元素包含校验器和过滤器。)

另一个普通的扩展原因是定义一组缺省的装饰器,可以通过覆盖(overriding)loadDefaultDecorators() 方法来完成:

<?php
class My_Form_Login extends Zend_Form
{
    public function loadDefaultDecorators()
    {
        $this->setDecorators(array(
            'FormElements',
            'Fieldset',
            'Form'
        ));
    }
}

3 thoughts on “Zend_Form 之定制表单

  1. Pingback: lola hemp

  2. Pingback: digital transformation journey

  3. Pingback: Matt Erausquin

Comments are closed.