gpt4 book ai didi

scala - 如何使用play的表单验证来检查密码是否匹配

转载 作者:行者123 更新时间:2023-12-02 04:23:39 26 4
gpt4 key购买 nike

我的表单如下所示:

案例类PasswordData(currentPassword: String, newPassword: String, verifyPassword: String)

val passwordForm = Form(
mapping(
)(PasswordData.apply)(PasswordData.unapply) verifying("Passwords do not match", fields => fields match {
case data => (data.newPassword == data.verifyPassword)
})
)

我的 Controller 操作遵循通常的模式:

passwordForm.bindFromRequest.fold(
error => {},
form => {}
)

我现在遇到的问题是我需要验证输入的“currentPassword”是否与用户对象上的密码相同。

userDao.getById(userId).password == form.currentPassword

但我不能这样做,因为我不确定如何将 int 他 userId 传递到我的表单定义,因为它是动态的。

即我不能这样做:

"currentPassword" -> nonEmptyText.verifying(....)  // userId not in scope

更新

我也尝试使用显示这些错误(它们当前不显示错误,我只看到 ul 标签)。

 @if(form.hasGlobalErrors) {
<ul>
@form.errors.foreach { error =>
<li>@error.message</li>
}
</ul>
}

最佳答案

没有什么可以阻止您将 passwordForm 设置为 def,您可以在其中传递用户模型。

def passwordForm(user: User) = Form(
mapping(
"currentPassword" -> nonEmptyText.verifying("Incorrect password.", enteredPassword =>
// some comparison with `enteredPassword` and the user
),
...
)(PasswordData.apply)(PasswordData.unapply)
.verifying("Passwords do not match", data =>
data.newPassword == data.verifyPassword
)
)


passwordForm(user).bindFromRequest.fold(
error => ...,
form => ...
)

此外,要打印 View 中的全局错误,可以通过 globalErrors 访问它们,而不是正常的 errors 字段。您还应该使用 map 而不是 foreachforeach 返回 Unit,它不会向 View 打印任何内容。

@if(form.hasGlobalErrors) {
<ul>
@form.globalErrors.map { error =>
<li>@error.message</li>
}
</ul>
}

关于scala - 如何使用play的表单验证来检查密码是否匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28594378/

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