Revel 自帶參數(shù)驗證功能:
示例應用程序提供了一些深入理解參數(shù)驗證的例子。
下面演示使用內聯(lián)錯誤消息驗證字段
func (c MyApp) SaveUser(username string) revel.Result {
// Username (required) 至少 4 - 15 個字符.
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!
...
}
username
字段驗證條件 (Required必填, MinSize最小長度, MaxSize最大長度, Match匹配一個正則表達式).Validation.HasErrors()
如果驗證沒有通過,返回 trueValidation.Keep()
告訴 Revel 序列化 驗證錯誤消息到 Flash cookie中.Hotels.Settings 方法渲染一個模板:
{{/* app/views/Hotels/Settings.html */}}
...
{{if .errors}}Please fix errors marked below!{{end}}
...
<p class="{{if .errors.username}}error{{end}}">
Username:
<input name="username" value="{{.flash.username}}"/>
<span class="error">{{.errors.username.Message}}</span>
</p>
它做了三件事:
errors
map 中是否存在key為 username
的錯誤字段.username
的字段值注意:模板函數(shù) field 使用了驗證錯誤框架,使模板的編寫變得更加方便。
如果錯誤消息都顯示在一個地方,模板就變得簡單了 (比如,放到頁面頂部的一個紅色的盒子中.)
下面的例子與上面有兩個不同:
Message
,而不是使用驗證函數(shù)默認的錯誤信息代碼如下:
func (c MyApp) SaveUser(username string) revel.Result {
// Username (必填) 至少 4 - 15 字符.
c.Validation.Required(username).Message("Please enter a username")
c.Validation.MaxSize(username, 15).Message("Username must be at most 15 characters long")
c.Validation.MinSize(username, 4).Message("Username must be at least 4 characters long")
c.Validation.Match(username, regexp.MustCompile("^\\w*$")).Message("Username must be all letters")
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}}
<div class="error">
<ul>
{{range .errors}}
<li> {{.Message}}</li>
{{end}}
</ul>
</div>
{{end}}
...
更多建議: