validation - Revel 中的表单输入验证

标签 validation web-applications go revel

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

最佳答案

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 - Revel 中的表单输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112433/

相关文章:

java - 如何查看 Tomcat 正在使用/访问的 jar?

assembly - go 编译器生成的汇编代码中的这种模式是什么?

javascript - 验证月份的输入

c# - 复杂的正则表达式验证器

c# - .NET 项目中 SQL 的最佳实践

html - 关于 :config? 的 Firefox anchor 链接

go - 构建约束排除所有 Go 文件

interface - 嵌入式结构的覆盖行为

javascript - 有人可以给我一个示例 JavaScript RegEx 来使输入的 2 个重复字符无效吗

excel - 数据验证中的动态名称管理器和间接函数