0

我的一个表格有一些必填字段,而有些则没有,可以说“姓名”是必需的,但“注释”不是:

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);       

...

我的一个控制器调用此表单并使用其所有字段。这工作正常,并且名称字段的验证发生。

但是...另一个控制器使用相同的表单,只是为了更改注释...为此,我使用 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() 没有成功,并查看了Zend 表单验证

评论说“您应该在调用 $form->isValid() 之前删除验证器。”

但是怎么做?

您能给我的任何帮助将不胜感激。

4

1 回答 1

0

把这条线

$frm->getElement('name')->setRequired(false);

$frm->removeElement('name');  
于 2012-05-10T17:43:52.033 回答