2010-05-14 135 views
1

我有一個窗體中有兩個文本字段,我需要確保既沒有空值也沒有包含相同的字符串。Zend_Validate_Abstract自定義驗證程序不顯示正確的錯誤消息

我編寫的自定義驗證程序擴展了Zend_Validate_Abstract,並正確地工作,因爲它傳遞了正確的錯誤消息。在這種情況下:isEmpty或isMatch。

但是,文檔說使用addErrorMessages來定義要顯示的正確錯誤消息。在這種情況下

,我已附加

->addErrorMessages(array("isEmpty"=>"foo", "isMatch"=>"bar")); 

到表單字段。根據我讀過的所有內容,如果我從isValid()返回「isEmpty」,我的錯誤信息應該是「foo」,如果我返回「isMatch」,那麼它應該讀取「bar」。

雖然我並沒有遇到這種情況。如果我返回false是有效的,不管我設置$ this - > _ error()是什麼,我的錯誤消息顯示爲「foo」,或者我在錯誤消息數組的索引[0]處得到的任何內容。

如果我沒有定義errorMessages,那麼我只是得到我傳回給顯示器的錯誤代碼,並且我得到正確的一個,這取決於我傳回的內容。

如何捕獲錯誤代碼並在窗體中顯示正確的錯誤消息?

我已經實施的修復方法,直到我找到正確的方法,是將完整的消息作爲來自自定義驗證程序的錯誤代碼傳回。這將在這種情況下工作,但錯誤消息是特定於此頁面,並不真正允許重新使用代碼。

事情我已經嘗試: 我已經嘗試驗證鏈接,這樣我的自定義的驗證只爲匹配檢查:

->setRequired("true") 
->addValidator("NotEmpty") 
->addErrorMessage("URL May Not Be Empty") 
->addValidator([*customValidator]*) 
->addErrorMessage("X and Y urls may not be the same") 

但同樣,如果任一拋出一個錯誤,需要設置的最後一條錯誤信息顯示,而不管真正的錯誤是什麼。

我不完全確定該從哪裏出發。

有什麼建議嗎?

回答

2

我想你誤解了手冊。 It says

addErrorMessage($消息):添加 錯誤消息顯示在形式 驗證錯誤。您可以多次呼叫此 ,並且附加到堆棧的新消息是 。

addErrorMessages(數組$消息):添加 多個錯誤消息以顯示於 形式驗證錯誤。

這些函數將自定義錯誤消息添加到整個表單堆棧。

如果您想在驗證失敗時顯示驗證錯誤消息,則必須在驗證器內部實現該消息。

即。

const EMPTY = 'empty'; 

protected $_messageTemplates = array(
    self::EMPTY => "Value is required and can't be empty", 
); 

public function isValid($value) 
{ 
    if(empty($value)) { 
    $this->_error(self::EMPTY); 
    return false; 
    } 

    return true; 
} 

這種方式,驗證失敗後,您可以使用$validator->getMessages()得到使用$validator->getErrors()和錯誤信息的錯誤代碼。

如果您正確定義了$_messageTemplates,則Zend_Form將自動使用錯誤消息而不是錯誤代碼並將其打印出來。

希望這會有所幫助。

+0

謝謝,michal!我會盡快給它一個去。 – 2010-05-19 22:03:30

相關問題