Forms Zend Framework表单:在重用表单时,我调用removeElement,但IsValid在删除的元素上失败。。。为什么?
我的其中一个表单有一些必填字段,有些则没有,比如说“name”是必填字段,但“note”不是:Forms Zend Framework表单:在重用表单时,我调用removeElement,但IsValid在删除的元素上失败。。。为什么?,forms,zend-framework,Forms,Zend Framework,我的其中一个表单有一些必填字段,有些则没有,比如说“name”是必填字段,但“note”不是: class Form_CompanyForm extends Zend_Form{ public function init(){ // add element: ID textbox $ID = $this->createElement('hidden', 'id'); $this->addElement($ID); // add element: na
class Form_CompanyForm extends Zend_Form{
public function init(){
// add element: ID textbox
$ID = $this->createElement('hidden', 'id');
$this->addElement($ID);
// add element: name textbox
$name = $this->createElement('text', 'name');
$name->setLabel('name:');
**$name->setRequired(TRUE);**
$name->setAttrib('size',100);
$name->setAttrib('maxlength',255);
$name->addFilters(array(new Zend_Filter_StringTrim()));
$this->addElement($name);
// add element: note text area
$note = $this->createElement('textarea', 'note');
$note->setLabel('note:');
**$note->setRequired(FALSE);**
$note->setAttrib('cols',50);
$note->setAttrib('rows',4);
$note->addFilters(array(new Zend_Filter_StringTrim()));
$this->addElement($note);
我的一个控制器调用此窗体并使用其所有字段。这工作正常,并且对name字段进行了验证
但是。。。另一个控制器使用相同的表单,只是更改注释。。。为此,我使用removeElement()从表单中删除名称:
public function editcompanynoteAction(){
$mod = new Model_Company();
$frm = new Form_CompanyForm();
$frm->removeElement('name');
$frm->setAction('/companyland/editcompany');
$frm->setMethod('post');
if($this->getRequest()->isPost()){
if($frm->isValid($_POST)){
表单正确显示,如预期,仅显示注释字段
但是保存表单时,验证失败,因为需要“名称”字段
我是Zend的新手,我不明白为什么表单验证会失败。。。在一个元素上是。。。删除
网上有一些关于使用removeElement的例子。。。我尝试了clearValidators()但没有成功
注释说“您应该在调用$form->isValid()之前删除验证器。”
但是怎么做呢
如果您能给我任何帮助,我将不胜感激。请讲这句话
$frm->getElement('name')->setRequired(false);
以前
$frm->removeElement('name');
上面的代码中有一个bug,要调用的控制器应该是“/companyland/editcompanynote”而不是“/companyland/editcompany”。这就是为什么我遇到这个问题的原因,一旦更正,在控制器中调用了正确的操作,我就再也没有遇到这个问题。嗨,有另一个bug(见上面的注释),一旦更正,我不再遇到这个问题了。谢谢你的快速回答!