在Revel中表单输入验证

时间:2014-06-09 01:04:04

标签: validation web-applications go revel

我正在学习Revel并使用Validation包对输入进行一些检查。 我想看看是否已经存在一个带有"名称的记录"在DB中(我通过表单获得用户的输入),如果是真正的返回错误,则创建一个记录。我能够验证(使用内置方法,如必需,Maxlen ......)一个字段并在HTML中显示错误。但是对于我的自定义检查是将自定义验证器添加到Validation包中的方式,还是有一种方法可以将自定义键和错误添加到验证上下文中。我无法找到如何将自定义键和消息添加到错误地图中。感谢。

1 个答案:

答案 0 :(得分:2)

狂欢的validators.Validator界面如下所示:

type Validator interface {
    IsSatisfied(interface{}) bool
    DefaultMessage() string
}

*validation.Validation有一个方法:

func (v *Validation) Check(obj interface{}, checks ...Validator) *ValidationResult

*validation.ValidationResult有一个方法:

func (*ValidationResult) Message

把所有这些放在一起:

type usernameChecker struct {}

func(u usernameChecker) IsSatisified(i interface{}) bool {
    s, k := i.(string)

    if !k {
        return false
    }

    /* check if s exists in DB */
}

func(u usernameChecker) DefaultMessage() string {
    return "username already in use"
}

在您的申请中:

func (c MyApp) SaveUser(username string) revel.Result {
    c.Validation.Check(username, usernameChecker{}).Message("more specific or translated message in case of failure")
}

如果不是我见过的设计最差的验证库,那就是这个。