企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Revel 自带参数验证功能: * 提供验证上下文,用来收集和管理验证错误(通过key 和 message)。 * 辅助函数用来检查数据,并把错误信息带到上下文中。 * 一个模板函数,从验证上下文通过key获取错误信息。 [示例应用程序](http://gorevel.cn/docs/samples/validation.html)提供了一些深入理解参数验证的例子。 ## 内联错误消息 下面演示使用内联错误消息验证字段 ~~~ 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! ... } ~~~ 1. `username`字段验证条件 (Required必填, MinSize最小长度, MaxSize最大长度, Match匹配一个正则表达式). 2. 每个验证条件返回一个 [ValidationResult](http://gorevel.cn/docs/docs/godoc/validation.html#ValidationResult),如果验证没有通过,验证结果会被保存到验证上下文中。 3. 作为构建应用程序的一部分,Revel记录被验证的变量的名称,并使用它作为在验证上下文的默认key(之后可以通过key获取验证错误消息)。 4. `Validation.HasErrors()` 如果验证没有通过,返回 true 5. `Validation.Keep()` 告诉 Revel 序列化 验证错误消息到 Flash cookie中. 6. Revel 重定向到 Hotels.Settings 方法. 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> ~~~ 它做了三件事: 1. 检查 `errors` map 中是否存在key为 `username`的错误字段. 2. 带回 `username`的字段值 3. 在input下面显示错误消息(如果没有指定验证字段出错后的错误消息,则会显示验证函数默认的错误消息) **注意:**模板函数 *field* 使用了验证错误框架,使模板的编写变得更加方便。 ## 置顶的错误消息 如果错误消息都显示在一个地方,模板就变得简单了 (比如,放到页面顶部的一个红色的盒子中.) 下面的例子与上面有两个不同: 1. 我们为字段指定了一个验证错误消息 `Message`,而不是使用验证函数默认的错误信息 2. 我们在页面的上方打印所有的错误消息 代码如下: ~~~ 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}} ... ~~~