Go Revel - Validation(驗證)
Revel提供了內建函數用于驗證參數。它提供了:
一個`Validation`上下文集合來管理驗證錯誤信息(鍵與消息內容)
輔助函數用于檢查數據并將錯誤信息放入上下文
一個模板函數用于從`Validation`上下文以鍵的方式獲取錯誤信息
##內嵌錯誤信息
這個例子演示了字段驗證與內嵌錯誤信息:
func (c MyApp) SaveUser(username string) revel.Result {
// Username 參數必須是4~15個長度,名且匹配正則 ^\\w*$
c.Validation.Required(username)
c.Validation.MaxSize(username, 15)
c.Validation.MinSize(username, 4)
c.Validation.Match(username, regexp.MustCompile("^\\w*$"))
if c.Validation.HasErrors() {
// 存儲參數與異常信息至flash,并重轉向
c.Validation.Keep()
c.FlashParams()
return c.Redirect(Hotels.Settings)
}
// All the data checked out!
...
}
整個步驟如下:
1、驗證`username`必須符合四種情況(必填、最長15個、最少4個,匹配正則)
2、每一次驗證返回一個`ValidationResult`對象,失敗的`ValidationResult`存儲在`Validation`上下文
3、在構建項目時,revel會記錄每個需要驗證參數的變量名,并且將它作為默認的`validation`上下文中的key
4、`Validation.HasErrors()` 如果`validation`上下文包含錯誤信息,則返回`true`
5、`Validation.Keep()`使`ValidationErrors`錯誤信息寫入flash cookies
6、重定向至`Hotels.Settings`
`Hotels.Settings`會渲染如下模板:
{{/* app/views/Hotels/Settings.html */}}
...
{{if .errors}}Please fix errors marked below!{{end}}
...
{{end}}
...
Username: {{.errors.username.Message}}
它做了3個事: 1、檢查錯誤信息map中`username`鍵是否存在錯誤 2、使用`username`中的值預填充input標簽 3、在input標簽下面顯示錯誤信息。 ##頂部的錯誤信息 錯誤信息可以被顯示在一個固定的地方,這樣可以簡化錯誤顯示機制。例如,在頁面上方有個紅色邊框的區域顯示這些信息。 這與上面的例子有兩點不同: 1、我們使用`Message`,而不是`ValidationError`的`Key` 2、我們在表單的上部顯示所有錯誤信息 代碼: func (c MyApp) SaveUser(username string) revel.Result { // Username 參數必須是4~15個長度,名且匹配正則 ^\\w*$ c.Validation.Required(username) c.Validation.MaxSize(username, 15) c.Validation.MinSize(username, 4) c.Validation.Match(username, regexp.MustCompile("^\\w*$")) if c.Validation.HasErrors() { // 存儲參數與異常信息至flash,并重轉向 c.Validation.Keep() c.FlashParams() return c.Redirect(Hotels.Settings) } // All the data checked out! ... } 模板: {{/* app/views/Hotels/Settings.html */}} ... {{if .errors}}-
{{range .errors}}
- {{.Message}} {{end}}
浙公網安備 33010602011771號