Validation Revel中的表单输入验证

Validation Revel中的表单输入验证,validation,web-applications,go,revel,Validation,Web Applications,Go,Revel,我正在学习Revel并使用验证包对输入进行一些检查。 我想看看数据库中是否已经存在一个名为“name”的记录(我通过一个表单从用户那里得到一个输入),如果为true,则返回error,否则创建一个记录。我能够验证(使用内置方法,如Required、Maxlen…)一个字段并在HTML中显示错误。但是,对于我的自定义检查,我的做法是向验证包中添加自定义验证器,或者是否有办法向验证上下文中添加自定义键和错误。我找不到如何将自定义键和消息添加到错误映射。谢谢。revel的验证器。验证器的界面如下所示:

我正在学习Revel并使用验证包对输入进行一些检查。
我想看看数据库中是否已经存在一个名为“name”的记录(我通过一个表单从用户那里得到一个输入),如果为true,则返回error,否则创建一个记录。我能够验证(使用内置方法,如Required、Maxlen…)一个字段并在HTML中显示错误。但是,对于我的自定义检查,我的做法是向验证包中添加自定义验证器,或者是否有办法向验证上下文中添加自定义键和错误。我找不到如何将自定义键和消息添加到错误映射。谢谢。

revel的
验证器。验证器的界面如下所示:

type Validator interface {
    IsSatisfied(interface{}) bool
    DefaultMessage() string
}
*验证。验证有一种方法:

func (v *Validation) Check(obj interface{}, checks ...Validator) *ValidationResult
func (*ValidationResult) Message
*验证。验证结果
有一个方法:

func (v *Validation) Check(obj interface{}, checks ...Validator) *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")
}

这是我见过的设计最糟糕的验证库。

啊,好吧,我做了一些类似的事情,但尝试通过验证直接调用验证程序。我会查出来的,谢谢。同意这个验证库是复杂的,我在寻找Golang的Web框架,发现Revel和Martini是主要的。你对它们有什么意见或建议吗?你为什么要寻找框架?只需使用
net/http
;没有任何库或自编程的“框架”可以为您提供更多。@Tomwide如果您可以改进验证界面,为什么不将其贡献给Revel?我确信,即使是在当前的形式下,它也会产生预期的结果,与大量的
if
条件相比,代码行更少。@Brenden我为什么要为一个我不同意的项目做出贡献?我不是建议用其他方法来解决问题。只是说设计不好。@Zahrec:我还没有找到。也许我会出版我自己的东西。我们看看。你试过阅读手册吗?此外,考虑默认验证器是如何编码的可能是有用的:最后,您是否试图通过HTML表单验证用户输入?根据您的描述,您似乎不清楚如何使用Revel的验证功能。也许你用它的目的不对?