课程表

Revel课程

工具箱
速查手册

Revel 参数验证

当前位置:免费教程 » 程序设计 » Revel

Revel 自带参数验证功能:

  • 提供验证上下文,用来收集和管理验证错误(通过key 和 message)。
  • 辅助函数用来检查数据,并把错误信息带到上下文中。
  • 一个模板函数,从验证上下文通过key获取错误信息。

示例应用程序提供了一些深入理解参数验证的例子。

示例应用程序程序结构如下:

  1. validation/app/
  2. models
  3. user.go # User 结构化验证程序
  4. controllers
  5. app.go # 说明
  6. sample1.go # 一般的字段验证,在页面顶部显示错误信息
  7. sample2.go # 一般的字段验证,内联显示错误信息.
  8. sample3.go # 结构化字段验证,内联显示错误信息

内联错误消息

下面演示使用内联错误消息验证字段

  1. func (c MyApp) SaveUser(username string) revel.Result {
  2. // Username (required) 至少 4 - 15 个字符.
  3. c.Validation.Required(username)
  4. c.Validation.MaxSize(username, 15)
  5. c.Validation.MinSize(username, 4)
  6. c.Validation.Match(username, regexp.MustCompile("^\\w*$"))
  7.  
  8. if c.Validation.HasErrors() {
  9. // 在flash上下文中保存验证错误并重定向
  10. c.Validation.Keep()
  11. c.FlashParams()
  12. return c.Redirect(Hotels.Settings)
  13. }
  14.  
  15. // All the data checked out!
  16. ...
  17. }
  1. username字段验证条件 (Required必填, MinSize最小长度, MaxSize最大长度, Match匹配一个正则表达式).
  2. 每个验证条件返回一个 ValidationResult,如果验证没有通过,验证结果会被保存到验证上下文中。
  3. 作为构建应用程序的一部分,Revel记录被验证的变量的名称,并使用它作为在验证上下文的默认key(之后可以通过key获取验证错误消息)。
  4. Validation.HasErrors() 如果验证没有通过,返回 true
  5. Validation.Keep() 告诉 Revel 序列化 验证错误消息到 Flash cookie中.
  6. Revel 重定向到 Hotels.Settings 方法.

Hotels.Settings 方法渲染一个模板:

  1. {{/* app/views/Hotels/Settings.html */}}
  2. ...
  3. {{if .errors}}Please fix errors marked below!{{end}}
  4. ...
  5. <p class="{{if .errors.username}}error{{end}}">
  6. Username:
  7. <input name="username" value="{{.flash.username}}"/>
  8. <span class="error">{{.errors.username.Message}}</span>
  9. </p>

它做了三件事:

  1. 检查 errors map 中是否存在key为 username的错误字段.
  2. 带回 username的字段值
  3. 在input下面显示错误消息(如果没有指定验证字段出错后的错误消息,则会显示验证函数默认的错误消息)

注意:模板函数 field 使用了验证错误框架,使模板的编写变得更加方便。

置顶的错误消息

如果错误消息都显示在一个地方,模板就变得简单了 (比如,放到页面顶部的一个红色的盒子中.)

下面的例子与上面有两个不同:

  1. 我们为字段指定了一个验证错误消息 Message,而不是使用验证函数默认的错误信息
  2. 我们在页面的上方打印所有的错误消息

代码如下:

  1. func (c MyApp) SaveUser(username string) revel.Result {
  2. // Username (必填) 至少 4 - 15 字符.
  3. c.Validation.Required(username).Message("Please enter a username")
  4. c.Validation.MaxSize(username, 15).Message("Username must be at most 15 characters long")
  5. c.Validation.MinSize(username, 4).Message("Username must be at least 4 characters long")
  6. c.Validation.Match(username, regexp.MustCompile("^\\w*$")).Message("Username must be all letters")
  7.  
  8. if c.Validation.HasErrors() {
  9. // 保存错误信息到 flash 上下文中并重定向
  10. c.Validation.Keep()
  11. c.FlashParams()
  12. return c.Redirect(Hotels.Settings)
  13. }
  14.  
  15. // All the data checked out!
  16. ...
  17. }

模板如下:

  1. {{/* app/views/Hotels/Settings.html */}}
  2. ...
  3. {{if .errors}}
  4. <div class="error">
  5. <ul>
  6. {{range .errors}}
  7. <li> {{.Message}}</li>
  8. {{end}}
  9. </ul>
  10. </div>
  11. {{end}}
  12. ...
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号