1

使用 scalaforms 作为游戏框架,假设我有如下形式:

case class User(name: String, emails: List[String])

val userForm = Form(
    mapping(
        "name" -> text,
        "emails" -> list(text).verifying("Emails are duplicated",x => SomeFunctionThatHandlesDuplicateEmails(x))
    )(User.apply, User.unapply)
  )

SomeFunctionThatHandlesDuplicateEmails如果表单中收到的任何电子邮件已经在数据库中,则返回 false 的函数在哪里(因此,使该字段无效)。

那么,我的问题是:

有没有办法使用验证字段的值来创建错误消息?我想告诉用户哪些电子邮件特别是重复的,而不仅仅是告诉他们“电子邮件重复”,如上所示。

4

1 回答 1

2

verifying() 需要一系列Constraint[T]

您可以在此处查看实现的约束示例。

请注意,每个中的验证函数都会接收要验证的值,例如下面重复的“min”约束中的“o”:

 def min(minValue: Int): Constraint[Int] = Constraint[Int]("constraint.min", minValue) { o =>
   if (o >= minValue) Valid else Invalid(ValidationError("error.min", minValue))
 }

这很容易是:

 def min(minValue: Int): Constraint[Int] = Constraint[Int]("constraint.min", minValue) { o =>
   if (o >= minValue) Valid else Invalid(ValidationError("error.min", minValue, o))
 }

这将使错误消息格式化程序可以使用“o”作为 {1}(minValue 为 {0})。

于 2012-08-09T14:15:41.507 回答