@@ -25,8 +25,30 @@ final class Validation
25
25
* Creates a callable chain of constraints.
26
26
*
27
27
* @param Constraint|ValidatorInterface|null $constraintOrValidator
28
+ *
29
+ * @return callable($value)
28
30
*/
29
31
public static function createCallable ($ constraintOrValidator = null , Constraint ...$ constraints ): callable
32
+ {
33
+ $ validator = self ::createIsValidCallable ($ constraintOrValidator , ...$ constraints );
34
+
35
+ return static function ($ value ) use ($ validator ) {
36
+ if (!$ validator ($ value , $ violations )) {
37
+ throw new ValidationFailedException ($ value , $ violations );
38
+ }
39
+
40
+ return $ value ;
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Creates a callable that returns true/false instead of throwing validation exceptions.
46
+ *
47
+ * @param Constraint|ValidatorInterface|null $constraintOrValidator
48
+ *
49
+ * @return callable($value, &$violations = null): bool
50
+ */
51
+ public static function createIsValidCallable ($ constraintOrValidator = null , Constraint ...$ constraints ): callable
30
52
{
31
53
$ validator = $ constraintOrValidator ;
32
54
@@ -39,13 +61,10 @@ public static function createCallable($constraintOrValidator = null, Constraint
39
61
40
62
$ validator = $ validator ?? self ::createValidator ();
41
63
42
- return static function ($ value ) use ($ constraints , $ validator ) {
64
+ return static function ($ value, & $ violations = null ) use ($ constraints , $ validator ) {
43
65
$ violations = $ validator ->validate ($ value , $ constraints );
44
- if (0 !== $ violations ->count ()) {
45
- throw new ValidationFailedException ($ value , $ violations );
46
- }
47
66
48
- return $ value ;
67
+ return 0 === $ violations -> count () ;
49
68
};
50
69
}
51
70
0 commit comments