当表单包含内部大小写时验证 Scala 表单 类
Validate scala forms, when form contains inner case classes
帮助进行 Scala 表单验证,
表单数据的情况class:
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))
现在的问题是我们需要验证 "email" 和 "confirm" 电子邮件,但问题是我们需要创建 tuples
或 mapping
。那么处理这些类型的表单验证情况的最佳方法是什么。只需使用元组而不将其映射到任何情况即可轻松完成 class.
但是如果我们被要求在forms
.
中使用mapping
和大小写class怎么办?
首先,我将删除 confirm_email
和 confirm_password
字段,因为它们在 Data
模型中是多余的。完成此操作后,它将如下所示:
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
方法实现,以便将具有六个字段的表单映射到具有四个字段的模型案例 class。
请注意,自定义 unapply
方法不会为密码字段设置值,因为几乎在所有情况下都需要这样做。
最后,必须更改您的视图以正确引用新表单元组映射。例如,电子邮件字段应如下所示:
@helper.inputText(dataForm("email.email1"))
@helper.inputText(dataForm("email.email2"))
不使用新元组映射的字段保持不变。
帮助进行 Scala 表单验证,
表单数据的情况class:
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))
现在的问题是我们需要验证 "email" 和 "confirm" 电子邮件,但问题是我们需要创建 tuples
或 mapping
。那么处理这些类型的表单验证情况的最佳方法是什么。只需使用元组而不将其映射到任何情况即可轻松完成 class.
但是如果我们被要求在forms
.
mapping
和大小写class怎么办?
首先,我将删除 confirm_email
和 confirm_password
字段,因为它们在 Data
模型中是多余的。完成此操作后,它将如下所示:
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
方法实现,以便将具有六个字段的表单映射到具有四个字段的模型案例 class。
请注意,自定义 unapply
方法不会为密码字段设置值,因为几乎在所有情况下都需要这样做。
最后,必须更改您的视图以正确引用新表单元组映射。例如,电子邮件字段应如下所示:
@helper.inputText(dataForm("email.email1"))
@helper.inputText(dataForm("email.email2"))
不使用新元组映射的字段保持不变。