回答編集履歴
2
Constraints\.nonEmpty\(\) を最初に評価するように
answer
CHANGED
@@ -1,17 +1,24 @@
|
|
1
|
-
`Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。
|
1
|
+
`Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。
|
2
|
+
verifying で指定した Constraint は途中でエラーが見つかっても全て評価されるため、最初のエラーで中断したい場合には1つの Constraint にチェックを詰める必要があります。
|
3
|
+
nonEmptyText の実装は `text verifying Constraints.nonEmpty` となっているので、`Constraints.nonEmpty` を利用すると次のようになると思います。
|
2
4
|
|
3
5
|
```scala
|
4
|
-
import play.api.data.validation.{Constraint, Invalid, Valid}
|
6
|
+
import play.api.data.validation.{Constraint, Constraints, Invalid, Valid}
|
5
7
|
|
6
8
|
val constraint = Constraint[String] { string =>
|
9
|
+
Constraints.nonEmpty(string) match {
|
10
|
+
case invalid: Invalid => invalid
|
11
|
+
case Valid =>
|
7
|
-
|
12
|
+
if (/* チェック1 */) {
|
8
|
-
|
13
|
+
Invalid("check1 error")
|
9
|
-
|
14
|
+
} else if (/* チェック2 */) {
|
10
|
-
|
15
|
+
Invalid("check2 error")
|
11
|
-
|
16
|
+
} else {
|
12
|
-
|
17
|
+
Valid
|
18
|
+
}
|
13
19
|
}
|
14
20
|
}
|
15
21
|
|
16
|
-
|
22
|
+
text.verifying(constraint)
|
17
|
-
```
|
23
|
+
```
|
24
|
+
|
1
コードを変更
answer
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
|
6
6
|
val constraint = Constraint[String] { string =>
|
7
7
|
if (/* チェック1 */) {
|
8
|
-
Invalid("")
|
8
|
+
Invalid("check1 error")
|
9
9
|
} else if (/* チェック2 */) {
|
10
|
-
Invalid("")
|
10
|
+
Invalid("check2 error")
|
11
11
|
} else {
|
12
12
|
Valid
|
13
13
|
}
|