【发布时间】:2010-02-17 12:21:36
【问题描述】:
我遇到了zend_form 和zend_decorator 的问题。
我创建了一个装饰器类来默认所有表单都使用列表元素,但是它似乎不起作用!
基本上my_decorator_design 扩展zend_form 然后我的表单扩展了装饰器。
想法?
class My_Decorator_Design extends Zend_Form {
public function loadDefaultDecorators() {
$this->addDecorator('FormElements')
->addDecorator('HtmlTag', array('tag' => 'ul')) //this adds a <ul> inside the <form>
->addDecorator('Form');
$this->setElementDecorators(array(
'ViewHelper',
'Label',
'Errors',
new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')) //wrap elements in <li>'s
));
$this->setDisplayGroupDecorators(array(
'FormElements',
'Fieldset',
new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')), //wrap groups in <li>'s too
new Zend_Form_Decorator_HtmlTag(array('tag' => 'ul'))
));
$this->setDisplayGroupDecorators(array(
'FormElements',
'Fieldset',
new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')) //wrap groups in <li>'s too
));
}
}
class Forms_User_Update extends My_Decorator_Design {
public function __construct($options=array()) {
parent::__construct($options);//if we ever want to pass on things to zend_form
$this->setName('user_update');
$this->loadDefaultDecorators();
//user_name, first_name, email, password, date_of_birth
$user_name = new Zend_Form_Element_Text('user_name');
$first_name = new Zend_Form_Element_Text('first_name');
$email = new Zend_Form_Element_Text('email');
$password = new Zend_Form_Element_Password('password');
$password2 = new Zend_Form_Element_Password('password2');
$submit = new Zend_Form_Element_Submit('Submit');
$user_name->setRequired(true)
->setLabel('Username');
$first_name->setRequired(false)
->setLabel('First Name');
$email->setRequired(true)
->setLabel('Email:')
->addFilter('StringToLower')
->addValidator('NotEmpty', true)
->addValidator('EmailAddress');
$password->setLabel('Password:')
->setRequired(false)
->setIgnore(false)
->addValidator('stringLength', false, array(6));
$password2->setLabel('Confirm Password:')
->setRequired(false)
->setIgnore(true);
$submit->setLabel("Submit")
->setIgnore(true);
$this->addElements(array(
$user_name, $first_name, $email, $password, $password2, $submit
));
//$this->Submit->removeDecorator('Label');
//$this->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
$this->setMethod('post');
$this->setAction('/update-account');
}
}
【问题讨论】:
-
你的代码最后好像被截断了。
-
不,它只是一般的 zend_form 代码,无论如何我都会编辑。谢谢
标签: php zend-framework zend-form zend-decorators