2012-12-08 84 views
1

我有一個表單上有幾個子表單。我有一個isValid方法的形式,我檢查是否只有一個特定的子窗體是有效的。例如,我必須檢查subform2是否正確驗證。如果子窗體驗證通過,則應該成功驗證整個窗體,即使其他子窗體的值不正確。他們不應該被驗證。我試過這樣的:zend框架子窗體isValidPartial?

if($subform->isValidPartial($_POST)) 
    return true; 
}else{ 
    return false; 
} 

但沒有成功。這段代碼總是返回true。當整個表格在沒有覆蓋isValid的情況下被正常驗證時,子表格被正確驗證,但是所有的驗證都是有效的。

回答

0

isSubFormValid將返回true,如果至少有一個子窗體有效。您可以指定子表單名稱或通過null

class My_Form extends Zend_Form 
{ 
    public function isSubFormValid($name = null, array $data = null) 
    { 
     if (is_null($name)) { 
      $subForms = $this->getSubForms(); 
     } else { 
      $subForms = array($this->getSubForm($name)); 
     } 

     foreach ($subForms as $subForm) { 
      if ($subForm->isValid($data)) { 
       return true; 
      } 
     }  

     return false; 
    }  
} 

用例:

class Example extends My_Form 
{ 
    public function init() 
    { 
     $subForm1 = new Zend_Form_SubForm(); 
     $subForm1->addElement($this 
      ->createElement('text', 'name') 
      ->setRequired(true)); 

     $subForm2 = new Zend_Form_SubForm(); 
     $subForm2->addElement($this 
      ->createElement('text', 'name') 
      ->setRequired(true)); 

     $this->addSubForm($subForm1, 'form1'); 
     $this->addSubForm($subForm2, 'form2'); 

     $this->addElement($this->createElement('submit', 'send')); 
    }  
} 

/* ... */ 
public function indexAction() 
{ 
    $form = new Example(); 

    if ($this->_request->isPost()) { 
     if ($form->isSubFormValid(null, $this->_request->getPost())) { 
      die('is valid'); 
     } 
    } 

    $this->view->form = $form; 
} 

/* ... */ 
+0

十分感謝。它會像樹形結構一樣工作嗎?例如主窗體(array(subform1(array(subform3,subform4)),subform2(array(subform5,subform6))))? – masteryoda