Forms Zend Framework表单:在重用表单时,我调用removeElement,但IsValid在删除的元素上失败。。。为什么?

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

我的其中一个表单有一些必填字段,有些则没有,比如说“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: 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(见上面的注释),一旦更正,我不再遇到这个问题了。谢谢你的快速回答!