オブジェクトが作成されているときにのみPlay2の一意性検証を適用するにはどうすればよいですか?カスタムverifying
句を追加することはできますが、既存のオブジェクトを(作成するのではなく)編集すると失敗します。
質問する
312 次
2 に答える
1
編集と作成で同じ検証チェックを実行していない場合、Form
両方に同じオブジェクトを使用すべきではないということでしょうか? Form
実際には、実際のプログラムで作成と編集の両方に同じオブジェクトを使用することが理にかなっている特定のケースはごくわずかです。
一方、作成と編集の両方に共通する検証ロジックを複製したくない場合は、2 つのForm
オブジェクトでマッピング フラグメントを再利用できます。
val commonMapping = "common" -> tuple(
"foo" -> number,
"bar" -> nonEmptyText
)
val creationForm = Form(tuple(
commonMapping,
"baz" -> date
) verifying (/* creation specific constraint */))
val editionForm = Form(tuple(
commonMapping,
"bah" -> boolean
))
于 2013-01-13T17:43:39.170 に答える
0
より良い解決策がわからないため、コントローラーでこの回避策を実行しています。
ご想像のとおり、 isNew 値は作成のケースをチェックします。私の場合は天気が seq (作成の場合は 0) が URL 経由で渡されます。
メソッド userExists(userName: String): Boolean は、一意性をチェックします。
val boundForm = userForm.bindFromRequest()
if(!boundForm.hasErrors) {
val user = boundForm.get // save as form has no errors
if(isNew && userExists(user.getUsername)) {
boundForm = boundForm.copy(value = None, errors = Seq(FormError("", "user exists, choose another name")))
}
}
boundForm.fold(...,...)
于 2013-01-11T12:36:26.180 に答える