Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 当表单包含内部大小写类时,验证scala表单_Forms_Scala_Validation_Playframework 2.0 - Fatal编程技术网

Forms 当表单包含内部大小写类时,验证scala表单

Forms 当表单包含内部大小写类时,验证scala表单,forms,scala,validation,playframework-2.0,Forms,Scala,Validation,Playframework 2.0,帮助进行Scala表单验证 以下是表单数据的案例类: case class Data( firstName: String, lastName: String, email: String, confirm_email: String, password: String, confirm_password: String) } 以及Scala表单: val form = Form( mapping( "firstNam

帮助进行Scala表单验证

以下是表单数据的案例类:

  case class Data(
    firstName: String,
    lastName: String,
    email: String,
    confirm_email: String,
    password: String,
    confirm_password: String)
}
以及Scala表单:

  val form = Form(
    mapping(
      "firstName" -> nonEmptyText,
      "lastName" -> nonEmptyText,
      "email" -> email,
      "confirm_email" -> email,
      "password" -> nonEmptyText(minLength = 8),
      "confirm_password" -> nonEmptyText(minLength = 8))(Data.apply)(Data.unapply))
现在的问题是我们需要验证“电子邮件”和“确认”电子邮件,但问题是我们需要创建
元组
映射
。那么,处理此类表单验证情况的最佳方法是什么呢。只需使用元组,而不将元组映射到任何case类,就可以很容易地实现这一点


但是如果我们被要求在
表单中使用
映射
和case类

首先要做的事情是,我要去掉
确认电子邮件
确认密码
字段,因为它们在
数据
模型中是多余的。完成此操作后,它将如下所示:

case class Data(
  firstName: String,
  lastName: String,
  email: String,
  password: String)
接下来,需要更新表单映射:

val form = Form[Data](
  mapping(
    "firstName" -> nonEmptyText,
    "lastName" -> nonEmptyText,
    "email" -> tuple(
      "email1" -> email,
      "email2" -> email
    ).verifying(Messages("form.error.emailNotEquals"), email => email._1 == email._2),
    "password" -> tuple(
      "pass1" -> nonEmptyText(minLength = 8),
      "pass2" -> nonEmptyText(minLength = 8)
    ).verifying(Messages("form.error.passwordNotEquals"), password => password._1 == password._2)
  )((firstName, lastName, email, password) => Data(firstName, lastName, email._1, password._1))
   ((form: Data) => Some((form.firstName, form.lastName, (form.email, form.email), ("", ""))))
)
需要进行两项修改:

  • 电子邮件和密码字段的嵌套映射和验证
  • 自定义
    apply
    unapply
    方法实现,以便将包含六个字段的表单映射到包含四个字段的models case类中
请注意,自定义
unapply
方法不会为密码字段设置值,因为它在几乎所有情况下都是理想的行为

最后,必须修改视图以正确引用新的表单元组映射。例如,电子邮件字段应如下所示:

@helper.inputText(dataForm("email.email1"))
@helper.inputText(dataForm("email.email2"))

不使用新元组映射的字段保持不变。

感谢ans Daniel,但我收到了以下错误:
[error]签名:Some.apply[A](x:A):Some[A][error]给定参数:form.firstName,form.lastName,scala.Tuple2(form.email,form.email),scala.Tuple2(“,”)[error]在调整后:Some((form.firstName,form.lastName,scala.Tuple2(form.email,form.email),scala.Tuple2(“,”):(String,String,(String,String,(String,String,String)))[error]((form:Data2)=>Some(form.firstName,form.lastName,(form.email,form.email),(“,”)
在表单的最后一行,
((form:Data)=>Some(…)
应替换为
((表格:数据)=>部分(…)
即额外的
()
。如果您可以对答案进行必要的更改,我可以将您的答案标记为正确