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