2014-06-09 39 views
2

我正在學習Revel並使用Validation包對輸入進行一些檢查。 我想看看是否已經存在一個DB中的「名稱」的記錄(我從用戶通過表單獲取輸入),如果真的返回錯誤,否則創建一個記錄。我能夠驗證(使用諸如Required,Maxlen等內置方法)字段並在HTML中顯示錯誤。但對於我的自定義檢查是添加一個自定義驗證程序到驗證包的方式去或有辦法我可以添加自定義鍵和錯誤的驗證上下文。我無法找到我可以如何將自定義鍵和消息添加到錯誤地圖。謝謝。表單輸入Revel的驗證

+0

您是否嘗試閱讀手冊? http://revel.github.io/manual/validation.html另外,考慮如何對默認驗證器進行編碼可能很有用:https://github.com/revel/revel/blob/df5d88dbece276012b4c7ab45a33a1047c1db108/validators.go# L15-L47最後,你想通過HTML表單驗證用戶輸入嗎?從你的描述來看,你似乎並不清楚你如何使用Revel的驗證功能。也許你把它用於錯誤的目的? – Brenden

回答

2

陶醉的validators.Validator界面看起來是這樣的:

type Validator interface { 
    IsSatisfied(interface{}) bool 
    DefaultMessage() string 
} 

而且*validation.Validation有一個方法:

func (v *Validation) Check(obj interface{}, checks ...Validator) *ValidationResult 

而且*validation.ValidationResult有一個方法:

func (*ValidationResult) Message 

把所有在一起:

type usernameChecker struct {} 

func(u usernameChecker) IsSatisified(i interface{}) bool { 
    s, k := i.(string) 

    if !k { 
     return false 
    } 

    /* check if s exists in DB */ 
} 

func(u usernameChecker) DefaultMessage() string { 
    return "username already in use" 
} 

而在你的應用程序:

func (c MyApp) SaveUser(username string) revel.Result { 
    c.Validation.Check(username, usernameChecker{}).Message("more specific or translated message in case of failure") 
} 

這如果不是最嚴重的設計驗證庫我見過一個。

+0

啊,好吧,我做了一些類似的事情,但嘗試直接通過驗證調用驗證器。我會檢查一下,謝謝。同意這個驗證庫很複雜,我正在尋找Golang的Web框架,並發現Revel和Martini是主要的。你對他們有什麼看法或建議嗎? – broun

+0

你爲什麼要尋找框架?只需使用'net/http';沒有更多的圖書館或自我宣揚的「框架」可以爲您提供。 – thwd

+0

@tomwilde如果你可以改進驗證界面,那麼爲什麼不把它貢獻給狂歡?我敢肯定,即使在目前的形式下,與「if」條件等等混雜的情況相比,它會以更少的代碼行產生期望的結果。 – Brenden