如果你讓你的驗證規則更寬鬆您可能能夠在Form
對象內做到這一點(nonEmptyText
而不是email
與不必要的空白電子郵件),使用transform
來清理輸入,然後verifying
實現實際驗證規則。這可能最終會變得非常醜陋,所以我不會繼續走這條路。
我認爲你只是一個不錯的選擇,可能會在調用bindFromRequest
之前通過過濾器傳遞表單數據。假設您使用的是parse.urlFormEncoded
BodyParser
(您應該是),那麼request.data
是Map[String, Seq[String]]
。
這是一個過濾器的粗略示例,但任何接受Map[String, Seq[String]]
的東西都會返回一個帶有清理數據的新Map[String, Seq[String]]
。
def cleanUserForm(data: Map[String, Seq[String]]): Map[String, Seq[String]] = {
data.map{ case (key, values) =>
if(key == "email") (key, values.map(_.replaceAll(" ", ""))) // trim whitespace from email
else (key, values)
}
}
然後在你的控制器,你必須在潔淨的數據明確地傳遞給bindFromRequest
(通常接受一個隱含的要求):
def register = Action(parse.urlFormEncoded) { request =>
val incomingData = request.body
val cleanData = cleanUserForm(incomingData)
userForm.bindFromRequest(cleanData).fold(
formWithErrors => ...
user => ...
)
}
val userForm: Form[User] = Form {
...
}
你可以寫一個自定義的身體解析器爲您的具體形式 –