8

電話番号を入力しなかった場合にのみ必要となる、フィールド、電子メールを含むフォームが必要だとしましょう。また、電話番号は、電子メールを入力しなかった場合にのみ必要です。これを行う?

requiredNoValid が存在する場合、このようなことをしたいと思います。

import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints._

case class User(email: Option[String] = None, age: Option[Int])

val userForm = Form(
  mapping(
    "email" -> email.verifying(requiredNoValid(phoneNumber)),
    "phoneNumber" -> number.verifying(requiredNoValid(email))
  )(User.apply)(User.unapply)
)

私は Play 1.X でこれに対する独自のソリューションを構築しましたが、機能が存在する場合、または実装することでこれを行う方法がある場合は、そのほとんどを放棄し、Play 2 フォームを使用してこれを行いたいと思います。バリデーターまたは制約。

4

2 に答える 2

7

verifying複数のフィールドを追加することもできます。簡単な例:

val userForm = Form(
  mapping(
    "email" -> optional(email),
    "phoneNumber" -> optional(number)
  ) verifying("You must provide your email or phone number.", { 
      case (e, p) => 
        isValidEmail(e) || isValidPhoneNumber(p)
  })(User.apply)(User.unapply)
)

外部検証の内部では、電子メールと電話番号の両方にアクセスでき、相互検証を行うことができます。

于 2012-09-20T01:39:04.413 に答える
6

このソリューションはJava用ですが、scalaを使用している場合は、同様のことができると確信しています。送信して検証すると、バインドされたフォームデータを取得できます。有効でない場合は、エラー メッセージを表示してフォームを拒否できます。例えば:

//Get filled form
Form<User> filledForm = userForm.bindFromRequest();
//Get the user object
User u = filledForm.get();

//If both are not empty
if(u.phoneNumber.isEmpty() && u.email.isEmpty()){
    filledForm.reject("email", "You must provide a valid email or phone number");
} 
于 2012-09-20T15:38:37.907 に答える