Zend_Form 之定制表单
By admin
- One minute read - 113 words23.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'
));
}
}