2011-04-17 105 views
0

我一直在通過文檔http://framework.zend.com/manual/en/zend.form.advanced.html的Zend Form Advanced Usage部分中的多頁表單教程。Zend中的多頁表單太早驗證所有表單

我的第一頁加載正常,但是當我提交它時,第二頁加載幷包含驗證錯誤消息。 (顯然我不想看到驗證錯誤的這個網頁,直到用戶填寫字段...)

我已經跟蹤到formIsValid()函數的最後一行。看來這裏的驗證是針對三種形式(不只是當前的)的所有元素運行的,所以在第二頁上顯示錯誤並不令人驚訝。

我已經在本教程結尾處的評論中嘗試了建議,即$ data [$ key] = $ info [$ key]。

您對本教程有何看法?你是如何解決這個問題的?

任何援助非常感謝!

+0

喜金,就可以發佈您的代碼,所以我可以看看嗎?另外,你使用的是什麼框架版本? – 2011-04-18 13:53:50

+0

嗨Dean,謝謝你的迴應。 (我看你在你的網站上很好地工作!)我已經把我的問題縮小到驗證器,並且在這裏開始了一個單獨的問題,http://stackoverflow.com/questions/5699395/zend-elements-and- setrequired-setallowempty-notempty – 2011-04-19 03:12:13

回答

0

的單證如下:

目前,多頁的形式不是 在Zend_Form中正式支持;然而,大多數支持實施 他們是可用的,並可以利用 一些額外的工具。

創建多頁表格 的關鍵是利用子表格,但是要在 頁面上只顯示一個這樣的子表格。這允許您一次提交a 單個子表格和 驗證它,但不處理表格 ,直到所有子表格都完成爲止。

你確定你一直在驗證一個子表單而不是整個表單嗎?

+0

謝謝阿康德。是的,想法是驗證單個子窗體,並在會話有效時將其存儲在會話中。然後,您嘗試驗證整個表單,作爲是否已提交所有表單的測試... – 2011-04-19 03:10:18

+0

如果您確實想要這樣做,則必須保留所有子表單的所有輸入。但我不會那樣做。 – akond 2011-04-19 06:07:02

3

我遇到了同樣的問題,這是我解決它的方法。

通過更換

public function formIsValid() 
    { 
     $data = array(); 
     foreach ($this->getSessionNamespace() as $key => $info) { 
      $data[$key] = $info; 
     } 

     return $this->getForm()->isValid($data); 
    } 

隨着

public function formIsValid() 
    { 
     $data = array(); 
     foreach ($this->getSessionNamespace() as $key => $info) { 
      $data[$key] = $info[$key]; 
     } 
     return (count($this->getStoredForms()) < count($this->getPotentialForms()))? false : $this->getForm()->isValid($data); 
    }