×

概要

Revel 介绍Revel 概念Revel 项目结构

Revel 控制器

Revel 控制器概要Revel 路由routesRevel 参数绑定Revel 参数验证Revel Session / FlashRevel 国际化Revel Results

Revel 模板

Revel 拦截器Revel 缓存CacheRevel 过滤器Revel Websockets

Revel 模块

Revel 模块概要Revel 测试Revel 计划任务

Revel 操作

Revel 日志类型Revel 版本控制Revel 部署

Revel 参考资料

Revel 配置文件app.confRevel 命令行工具Revel 常见问题

Revel 参数验证


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!
    ...
}
  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 方法渲染一个模板:

{{/* app/views/Hotels/Settings.html */}}
...
{{if .errors}}Please fix errors marked below!{{end}}
...

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}}
...

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)