2012-07-31 103 views
1

我寫更多的是顯示當前裝入上傳的圖片的小工具的更先進的文件表單元素,以及驗證圖像大小等如何在後驗證功能掛鉤的表單元素

如果該文件驗證,我希望表單元素本身將文件複製到公共可訪問的文件夾。這將意味着:a)可以顯示圖像; b)如果整個表單不驗證,則用戶不需要重新上傳圖像。

無論如何,這是背後的故事,但基本上我需要弄清楚如何從表單元素中獲取函數以在表單驗證該元素時運行。就像在表單元素類中創建一個onValidate()函數一樣。

最重要的是我需要一個不會溢出到控制器(或儘可能少)的解決方案。我正在努力尋找一種乾淨的方式來實現這一點。

我願做這樣的事情......

class File extends Element implements InputProviderInterface 
{ 

.... 

public function isValid() 
{ 
    if ($isValid = parent::isValid()) { 
     echo "Hi there, glad you called"; 
    } 

    return $isValid; 
} 

回答

1

Zend\Form\Element::getValidator()功能將在每個驗證運行被調用。

我想你應該調用一個關心它是複製文件的類。 也許你想提出一個事件來使它更加分離。

驗證和過濾現在是InputFilter類的一部分。 你的目標是寫一個專用的驗證器,並與你的元素硬連線。

如何實現這一點的一個例子,看看Zend\Form\Element\Select作爲硬件InArrayValidator在其onValidate()方法。

+0

謝謝塞繆爾,我最終創建了一個可以採取行動的過濾器。花了很多時間徹底嘗試創建InputFilter之後,我發現InputFilter類本身只是驗證器和過濾器的結構。我不太喜歡我的解決方案,因爲我認爲將動作代碼放在過濾器中並不是一種很好的做事方式。但我想要一些封裝。我想在幾個月內使用ZF2的時候,我將能夠回來並重構。 – 2012-08-06 17:37:37

+0

嗯,也許你的驗證器可以提出'FileValides'事件,然後由專門提供和複製這些文件的類拾起。驗證器可以在驗證成功後調用它。只是不要忘記注入該課程。 – 2012-08-06 17:45:28