gpt4 book ai didi

forms - Scala Play 表单验证 : different forms for one case class - is it possible?

转载 作者:行者123 更新时间:2023-12-02 07:03:14 24 4
gpt4 key购买 nike

我正在寻找一种方法来为一个案例类使用两种不同的形式。我试图用额外的构造函数来做到这一点,但失败了。查看代码片段:

case class LoginDetails(password: String, field3: Option[Int], field4: String)

case class User(username: String, loginDetails: LoginDetails) {
def this(username: String, password: String, field3: Option[Int], field4: String) = this(username, LoginDetails(password, field3, field4))
// some logic inside
}

val loginDetailsForm = Form(
mapping(
"password" -> text,
"field3" -> optional(number),
"field4" -> text
)(LoginDetails.apply)(LoginDetails.unapply))

val oldForm = Form(
mapping(
"username" -> email,
"password" -> text,
"field3" -> optional(number),
"field4" -> text
)(User.apply)(User.unapply))

val newForm = Form(
mapping(
"username" -> email,
"loginDetails" -> loginDetailsForm.mapping
)(User.apply)(User.unapply))

我想做的是支持两个 API(新的和旧的),但是如果我有同一个案例类的两个副本,我将不得不在其余的许多地方复制代码逻辑的代码。有办法吗?

当然,给定的代码不起作用,只是作为示例使用。

谢谢!

最佳答案

您可以尝试将方法 applyOldunapplyOld 添加到伴随对象,如下所示:

case class User(username: String, loginDetails: LoginDetails)
object User {
def applyOld(username: String, password: String, field3: Option[Int], field4: String) = new User(username, LoginDetails(password, field3, field4))
def unapplyOld(u: User): Option[(String, String, Option[Int], String)] =
Some((u.username, u.loginDetails.password, u.loginDetails.field3, u.loginDetails.field4))
}

你只需要方法 (String, String, Option[Int], String) => UserUser => Option[(String, String, Option[Int], String) ],你可以把它们放在任何你喜欢的地方。例如,您可以使用方法 applyunapply 创建对象 UserOld

用法:

val oldForm = Form(
mapping(
"username" -> email,
"password" -> text,
"field3" -> optional(number),
"field4" -> text
)(User.applyOld)(User.unapplyOld))

val newForm = Form(
mapping(
"username" -> email,
"loginDetails" -> loginDetailsForm.mapping
)(User.apply)(User.unapply))

关于forms - Scala Play 表单验证 : different forms for one case class - is it possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16896688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com