2011-10-02 25 views
1

我正在寫一個後端系統,我想讓用戶更改他們的電子郵件地址。 我寫了一個自定義驗證器來檢查用戶輸入的電子郵件地址是否已經存在於我的數據庫中。Zend_From驗證器僅當字段輸入已更改?

現在我遇到了一個問題:表單中填充了用戶數據,所以他的電子郵件地址是電子郵件字段的默認值。現在如果用戶提交表單,我的驗證器會拋出一個錯誤,因爲(當然)這個電子郵件地址已經存在!

我該如何解決這個問題?也許一個驗證器不是正確的方法來做到這一點? 或者是否有解決方案來檢測用戶是否更改了默認值並僅在這種情況下觸發驗證器?

回答

3

呵呵,這是第一次碰到驗證器的常見問題。關鍵是從驗證刪除一個ID,裏面你驗證從條款中排除當前用戶ID:

$validator = new Zend_Validate_Db_NoRecordExists(
    array(
     'table' => 'users', 
     'field' => 'email', 
     'exclude' => array(
     'field' => 'id', 
     'value' => $id_to_edit 
    ) 
) 
); 

編輯:進一步解釋,這是什麼一樣。它仍然抓取數據庫中的所有電子郵件地址,並且仍檢查是否存在衝突。如果電子郵件存在,它會忽略來自id = $ id_to_edit的電子郵件 - 所以當用戶更改其電子郵件,但另一個用戶已經有該電子郵件時,無論如何都會拋出錯誤!

+0

太好了。非常感謝你!我會爲我的下一個驗證器記住這個概念:-) – Matthias