zend_form 之定制表单元素
By admin
- One minute read - 91 words23.3.9. 定制元素
通过继承 Zend_Form_Element
类,你可以生成自己的定制元素,这样做的原因是:
共享通用的校验器和/或过滤器的元素
有定制装饰器功能的元素
有两个方法一般用来扩展元素: init()
可为元素添加定制的初始化逻辑; loadDefaultDecorators()
可用于设置一个用于元素的缺省装饰器的列表。
用例子来说明,你在一个表单里生成的所有文本元素需要用 StringTrim
来过滤、用通用的规则表达式来校验,并且你想用你生成的定制的装饰器来显示它们,’My_Decorator_TextItem’。另外,你有许多想指定的标准属性,包括 ‘size’、 ‘maxLength’ 和 ‘class’。你可以定义这样的元素如下:
<?php
class My_Element_Text extends Zend_Form_Element
{
public function init()
{
$this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator')
->addFilters('StringTrim')
->addValidator('Regex', false, array('/^[a-z0-9]{6,}$/i'))
->addDecorator('TextItem')
->setAttrib('size', 30)
->setAttrib('maxLength', 45)
->setAttrib('class', 'text');
}
}
?>
你接着可以通知表单对象关于元素的前缀路径并开始生成元素:
<?php
$form->addPrefixPath('My_Element', 'My/Element/', 'element')
->addElement('foo', 'text');
?>
‘foo’ 元素现在是 My_Element_Text
类型并展示你描画的行为。
当继承 Zend_Form_Element
时你想 override 的另一个特殊方法是 loadDefaultDecorators()
。这个方法有条件地为你的元素加载一组缺省装饰器,你可能想在你的继承类里替换你自己的装饰器。
<?php
class My_Element_Text extends Zend_Form_Element
{
public function loadDefaultDecorators()
{
$this->addDecorator('ViewHelper')
->addDecorator('DisplayError')
->addDecorator('Label')
->addDecorator('HtmlTag', array('tag' => 'div', 'class' => 'element'));
}
}
?>
有许多办法定制元素。别忘了阅读 Zend_Form_Element
API 文档来获知所有的可用方法。