1

Play Frameworkに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))
 }

これにより、エラーメッセージフォーマッタで{1}として「o」を使用できるようになります(minValueは{0}です)。

于 2012-08-09T14:15:41.507 に答える