我正在学习 Revel 并使用 Validation 包对输入进行一些检查。我想查看数据库中是否已经存在带有“名称”的记录(我通过表单从用户那里获得输入),如果返回错误,则创建记录。我能够验证(使用Required、Maxlen ...等内置方法)一个字段并在HTML中显示错误。但是对于我的自定义检查是否将自定义验证器添加到验证包中,或者是否有一种方法可以将自定义键和错误添加到验证上下文中。我找不到如何将自定义键和消息添加到错误映射。谢谢。
问问题
1221 次
1 回答
2
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")
}
这是我见过的设计最糟糕的验证库之一。
于 2014-06-09T09:48:47.297 回答