参数验证
编辑教程参数验证
Revel 自带参数验证功能:
- 提供验证上下文,用来收集和管理验证错误(通过key 和 message)。
- 辅助函数用来检查数据,并把错误信息带到上下文中。
- 一个模板函数,从验证上下文通过key获取错误信息。
内联错误消息
下面演示使用内联错误消息验证字段
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匹配一个正则表达式).
- 每个验证条件返回一个 ValidationResult,如果验证没有通过,验证结果会被保存到验证上下文中。
- 作为构建应用程序的一部分,Revel记录被验证的变量的名称,并使用它作为在验证上下文的默认key(之后可以通过key获取验证错误消息)。
- Validation.HasErrors() 如果验证没有通过,返回 true
- Validation.Keep() 告诉 Revel 序列化 验证错误消息到 Flash cookie中.
- 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>
它做了三件事:
- 检查 errors map 中是否存在key为 username的错误字段.
- 带回 username的字段值
- 在input下面显示错误消息(如果没有指定验证字段出错后的错误消息,则会显示验证函数默认的错误消息)
注意:模板函数 field 使用了验证错误框架,使模板的编写变得更加方便。
置顶的错误消息
如果错误消息都显示在一个地方,模板就变得简单了 (比如,放到页面顶部的一个红色的盒子中.)
下面的例子与上面有两个不同:
- 我们为字段指定了一个验证错误消息 Message,而不是使用验证函数默认的错误信息
- 我们在页面的上方打印所有的错误消息
代码如下:
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}}
...
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
![](http://cdns.jsrun.net/avatar/default.png)
选择支付方式:
![支付宝](/res/css/img/alipay.png)
![微信](/res/css/img/wxpay.png)
立即支付
![支付宝](/res/css/img/alipay.png)
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟