【问题标题】:Form input Validation in RevelRevel 中的表单输入验证
【发布时间】:2014-06-09 01:04:03
【问题描述】:

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

【问题讨论】:

  • 您尝试阅读手册了吗? revel.github.io/manual/validation.html 另外,考虑一下默认验证器的编码方式可能很有用:github.com/revel/revel/blob/… 最后,您是否尝试通过 HTML 表单验证用户输入?从您的描述来看,您似乎不清楚您是如何尝试使用 Revel 的验证功能的。也许您将其用于错误的目的?

标签: validation web-applications go revel


【解决方案1】:

revel 的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")
}

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

【讨论】:

  • 啊,好吧,我确实做了一些类似的事情,但尝试直接通过 Validation 调用验证器。我会检查一下,谢谢。同意这个验证库很复杂,我正在寻找 Golang 的 Web 框架,发现 Revel 和 Martini 是主要的。您对他们有什么意见或建议?
  • 您为什么要寻找框架?只需使用net/http;任何库或自称“框架”都无法为您提供更多功能。
  • @tomwilde 如果您可以改进验证界面,那么为什么不将其贡献给 Revel?我敢肯定,即使是目前的形式,与 if 条件等的混搭相比,它也会以更少的代码行产生预期的结果。
  • @Brenden 为什么我要为一个我不同意的项目做出贡献?我不建议 if-else 作为解决方案。只是说设计不好。
  • @Zahrec:我还没有找到。也许我会发表一些我自己的东西。我们拭目以待。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多