gpt4 book ai didi

validation - Play 2.0 表单的自定义验证(scala)

转载 作者:行者123 更新时间:2023-12-03 09:47:48 26 4
gpt4 key购买 nike

我正在写一个小爱好应用程序。现在,在我的应用程序中,我希望人们有一个 userId(就像我的 niklassaers 在堆栈溢出时一样),如果它已经被占用,我希望用户得到一个错误,以便他可以选择另一个。

下面是我的 Signup 对象,它在“mapping(”:“缺少对象表单中方法映射的参数;如果要将其视为部分应用的函数,请使用‘_’跟随此方法”这一行出现错误

object Signup extends Controller {

val userForm: Form[UserProfile] = Form(
mapping(
"userId" -> nonEmptyText,
"passwordHash" -> nonEmptyText,
"email" -> email
) verifying (
"ThisIsATest", { case(userId, passwordHash, email) => true }
// "UserID already taken", { DBService.exists(UserProfile.getClass().getName(), userId) }
)(UserProfile.apply)(UserProfile.unapply))


def index = Action {

Ok(views.html.signup(userForm))
}

def register = Action { implicit request =>
userForm.bindFromRequest.fold(
errors => BadRequest(views.html.signup(errors)),
user => Redirect(routes.Profile.index))
}
}

如您所见,我已将查找服务替换为仅返回 true 的测试验证,以使示例不那么复杂。为了完整起见,这是我的 UserDetail 案例类:
case class UserProfile(
userId : String,
email: String,
passwordHash: String)

我是 Scala 新手和 Play 新手,所以如果这是一个非常微不足道的问题,我很抱歉。但:
  • 收到此错误后,我做错了什么?
  • 这是添加我自己的验证的正确方法吗?
  • 后续问题:如果顺利,我会重定向,但是我应该如何重定向到引用刚刚验证的表单的页面?

  • 干杯

    尼克

    最佳答案

    终于解决了这个问题:验证不是映射之后的事情,而是约束条件下的事情。所以应该是

    "userId" -> nonEmptyText.verifying( "UserID already taken", userId => DBService.exists(UserProfile.getClass().getName().replace("$", ""), userId) == false ),

    我希望这可以帮助其他有同样问题的人:-)

    关于validation - Play 2.0 表单的自定义验证(scala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904683/

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