2013-03-20 67 views
2

我想使用戶能夠編輯他們的賬戶 - 如果他們指定新的密碼更新。Zend框架2相同的驗證空場

爲了確保正確的拼寫密碼,我使用了相同的驗證器與第二場。這在創建新用戶時起作用,但在編輯時遇到以下問題:

密碼字段可以爲空,因此不是必需的。由於密碼重複字段可以爲空以及(只是因爲你並不需要更改密碼或填寫密碼字段),我不需要在這個領域重新輸入密碼,如果沒有密碼中的任意值領域。

如果我提交一個空密碼字段(不是必需的)和一個必需的密碼重複字段,我得到錯誤請填寫密碼重複字段。

如何強制執行相同的驗證器進行檢查,但如果令牌中沒有值,則接受空值?

回答

0

最近我有同樣的問題。這是我做的。對於添加用戶表單,我添加了密碼,並輸入了「必填」選項的重新輸入密碼。編輯表單我做了兩件事:

1)在呈現表單之前,我確保密碼(和retype-password)字段爲空。當您拉動用戶填充未設置密碼字段時。

2)在檢查表單的isValid之前提交編輯表單時,將密碼的require選項更改爲false。之後再次在isValid之前,檢查帖子的密碼字段是否爲空。如果它是空的,則在將數組傳遞給表單進行驗證之前,先取消數組中的密碼字段。

結果將是,當您在密碼字段中提交內容時,它將檢查並驗證是否相同。如果密碼值爲空,則以前的密碼將被保留,因爲用戶更新查詢將不會觸摸密碼字段。

您可以添加一個小紙條像密碼字段:「保持空保留舊密碼」。

希望這有助於:)

斯托揚

+0

這種做法違背了輸入濾波器的可重用性,雖然。這個邏輯不應該在運行時從輸入過濾器本身之外進行操作。 – Ocramius 2013-03-20 08:36:20

+0

我同意:)。您是否會支持兩種不同的表單工廠對象或閉包,它們爲注入兩個不同的輸入過濾器添加用戶和另一個編輯用戶。而不是在控制器中注入表單,將其從服務定位器中拉出。如果不是,你的方法是什麼? – 2013-03-20 08:39:14

+0

檢查我標記爲可能的這一個愚蠢的問題:這是在我看來這是一個正確的方法:) – Ocramius 2013-03-20 08:41:12